Clipper On Line • Ver Tópico - Email pelo Xharbour
Página 1 de 7

Email pelo Xharbour

MensagemEnviado: 15 Jun 2010 17:48
por gralak
Iai galera estou precisando implementar email pelo Xharbour alguém saberia como eu posso fazer isso
que bibliotecas usar...
Ou se possivel alugum exemplo vlw té+++

Re: Email pelo Xharbour

MensagemEnviado: 15 Jun 2010 20:04
por anacatacombs
Caro Colega.
Já verificou se as classes TipMail, TipClientSmtp e TipClientPop não servem para o que vc precisa?

[]'s

Ana

Re: Email pelo Xharbour

MensagemEnviado: 15 Jun 2010 21:54
por alxsts
Olá!

Tem material recente sobre o assunto postado no fórum. Utilize o recurso de busca, que se encontra no canto superior direito da página.

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 10:40
por gralak
Então amiga eu inclusive ja estou tentando usar a lib TIP porem com o SENDEMAIL
porem os email não vão para seu destino ...
segue como eu estou mandando

SERVER: smtp.live.com
PORTA: 25
USUARIO PARA EMAL: meuemail@hotmail.com
SENHA: ***************
SERVIDOR POP: pop3.live.com
REMETENTE: remetente@hotmail.com
DESTINATARIO: destinatario@hotmail.com
ASSUNTO: teste
PRIORIDADE: 1
MENSAGEM: Teste 123456

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 13:13
por sygecom
Olá gralak,
Se for xharbour >= 1.0.0 pode usar HB_SENDMAIL() veja exemplo:
viewtopic.php?f=4&t=9345&p=52940&hilit=HB_SENDMAIL#p52940
ou
viewtopic.php?f=4&t=7635&hilit=HB_SENDMAIL

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 17:24
por gralak
Caro amigo o exemplo com a SENDEMAIL para yahoo funcionou blz
mas e para hotmail e gmail que usa a porta direfente da 25 como
eu devo proceder nessa situação ???

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 17:41
por sygecom
Em caso de uso com SSL tem que linkar a tipssl.lib(somente com xHarbour >=1.2.0) ou pode usar a rotina abaixo que com windows vai que é uma blz.:
http://www.fivewin.com.br/forum/topic.a ... 3&ARCHIVE=

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 17:42
por Maligno
Pelo menos no caso do GMail, sei que exigem SSL. Então, tente a porta 587.

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 22:13
por gralak
Então caro amigo Maligno eu ja tentei com a porta 587 mas também não deu certo

E amigo SYGECOM se vc puder disponilizar um exemplo de onde eu devo colocar
o trecho de código do exemplo que vc disponibilizou no link ???
vlw té+++

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 22:26
por Maligno
Já não enviou antes algum eMail por servidor com autenticação SSL? Se é a primeira vez, realmente, vai precisar ou só da LIB, ou da LIB e das DLLs (mais provável) que ela por ventura necessite para a autenticação. Eu mesmo tenho de usar duas DLLs no C++ Builder. Mas isso depende da implementação.

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 22:43
por alaminojunior

Re: Email pelo Xharbour

MensagemEnviado: 16 Jun 2010 23:24
por sygecom
gralak escreveu:E amigo SYGECOM se vc puder disponilizar um exemplo de onde eu devo colocar
o trecho de código do exemplo que vc disponibilizou no link ???

Não deixe de olhar a dica do colega Alamino, abaixo como estou usando com Gmail e Hotmail:

FUNCTION MAIN()

aFiles   :={"c:\anexo.pdf"}
cSubject :="Asunto do Email"
aQuem    :="destino@servidor.com.br"
cMsg     :="Corpo da Mensagem"
cServerIp:="smtp.live.com"
cFrom    :="emitente@hotmail.com"
cUser    :="emitente@hotmail.com"
cPass    :="senha"
vPORTSMTP:=25
aCC      :="copia@hotmail.com"
aBCC     :="copia_oculta@hotmail.com"
lCONF    :=.F.
lSSL     :=.T.

CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)

RETURN

**********************************************************************************************************
FUNCTION CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)
**********************************************************************************************************
local lRet := .f.
local oCfg, oError
local lAut  := .t.

  TRY
    oCfg := CREATEOBJECT( "CDO.Configuration" )
      WITH OBJECT oCfg:Fields
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"             ):Value := cServerIp
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"         ):Value := vPORTSMTP
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"              ):Value := 2
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"       ):Value := lAut
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"             ):Value := lSSL
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"           ):Value := alltrim(cUser)
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"           ):Value := alltrim(cPass)
           //:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"  ):Value := 30
              :Update()
      END WITH
      lRet := .t.
  CATCH oError
    MsgInfo( "Não Foi possível Enviar o e-Mail!"  +HB_OsNewLine()+ ;
             "Error: "     + Transform(oError:GenCode,   nil) + ";" +HB_OsNewLine()+ ;
             "SubC: "      + Transform(oError:SubCode,   nil) + ";" +HB_OsNewLine()+ ;
             "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +HB_OsNewLine()+ ;
             "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +HB_OsNewLine()+ ;
             "Mensaje: "   + oError:Description, "Atenção" )

  END
  //--> FIM DAS CONFIGURAÇOES.
  if lRet
     lRet := Envia_Mail(oCfg,cFrom,aQuem,aFiles,cSubject,cMsg,aCC,aBCC,lCONF)
  endif

Return lRet

********************************************************************************
Function Envia_Mail(oCfg,cFrom,cDest,aFiles,cSubject,cMsg,aCC,aBCC,vEMAIL_CONF)
********************************************************************************
  local aTo := {}
  local lRet := .f.
  local nEle, oError

  aTo      := { cDest } //--> PARA
  nEle := 1

   for i:=1 to len(aTo)
       TRY
         oMsg := CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                :Configuration = oCfg
                :From = cFrom
                :To = aTo[i]
                :Cc = aCC
                :BCC = aBCC
                :Subject = cSubject
                :TextBody = cMsg
                For x := 1 To Len( aFiles )
                    :AddAttachment(AllTrim(aFiles[x]))
                Next
                IF vEMAIL_CONF=.T.
                   :Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
                   :Fields:update()
                ENDIF
                :Send()
           END WITH
           lRet := .t.
       CATCH oError
           MsgInfo("Não Foi Possível Enviar," +HB_OsNewLine()+;
                         "a Mensagem: "             +HB_OsNewLine()+;
                               cSubject                   +HB_OsNewLine()+;
                               "p/ o eMail: " + aTo[i] +HB_OsNewLine()+;
                   " - Erro: " + + oError:Description , "Atenção" )
           lRet := .f.
       END
   next

Return lRet

Re: Email pelo Xharbour

MensagemEnviado: 17 Jun 2010 16:52
por gralak
Então Amigos implemetei o código repassado pelo SYGECOM
mas retornou uma menssagem de erro até onde eu vi
no código tem uma variavel chamada wSSL_EMAIL oque deveria ir nela ... ????

Re: Email pelo Xharbour

MensagemEnviado: 17 Jun 2010 17:03
por sygecom
Desculpa na correria, coloquei errado, mas já ajustei no post do código.

Re: Email pelo Xharbour

MensagemEnviado: 18 Jun 2010 10:26
por gralak
Nossa ta complicado resolver isso em hahahhahah
agora ta dando um retorno com o seguite erro:

DISP_MEMBERNOTFOUND

oque seria ...

Re: Email pelo Xharbour

MensagemEnviado: 18 Jun 2010 10:46
por alaminojunior
gralak escreveu:Nossa ta complicado resolver isso em hahahhahah


Meu caro, se a questão é apenas e tão somente enviar email´s "via xHarbour", dê uma atençãozinha ao meu tópico mais acima.
Testei com servidores Gmail, à princípio usando a porta 465 (SMTP) e não obtive êxito, mas ao trocar para 25 foi igual quiabo.
Boa sorte.

Re: Email pelo Xharbour

MensagemEnviado: 18 Jun 2010 13:33
por gralak
Então amigo alaminojunior eu também utilizei o exemplo que vc postou no forum
porém também não foi o email para o destino ...
Vc tem alguma idéia do que pode ser ...???

Re: Email pelo Xharbour

MensagemEnviado: 18 Jun 2010 14:32
por alaminojunior
Desse jeito não vai ?
Function envia_email_pos
local cSubject  := hb_oemtoansi("PàS VENDA - ")+usuario
local        aTo:= { endereco@provedor.com.br }
local cServerIp := smtp.gmail.com
local cFrom     := fulanodetal@gmail.com
local cUser     := fulanodetal@gmail.com
local cMsg      := memoread("carta1.txt")
cPass           := alltrim(cdpar000->mpswd)
porta           := 25
pop3            := imap.gmail.com:993
if hb_SendMail(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.

É como eu estou usando agora, e está indo.
Diferença de versões, será ?!?

Re: Email pelo Xharbour

MensagemEnviado: 19 Jun 2010 22:02
por sygecom
gralak escreveu:Nossa ta complicado resolver isso em hahahhahah
agora ta dando um retorno com o seguite erro:

DISP_MEMBERNOTFOUND

oque seria ...

Deve ter algum parâmetro errado, faça um teste pelo Outlook se der certo com certeza no sistema vai dar também. Ou post como está usando para tentar identificar junto com você o que está errado.

Re: Email pelo Xharbour

MensagemEnviado: 21 Jun 2010 08:12
por gralak
Iai galera no anexo segue a maneira que eu estou fazendo como o exemplo do SYGECOM e o do alaminojunior
se vcs puderem me dizer onde esta o problema eu agradeço

Re: Email pelo Xharbour

MensagemEnviado: 21 Jun 2010 11:04
por alaminojunior
Gralak, faça o teste somente com as seguintes linhas:
Function envia_email_pos()
local cSubject  := "Assunto de Gmail"//hb_oemtoansi("P…S VENDA - ")+usuario
local        aTo:= {"destino@servidor.com.br"}
local cServerIp := "smtp.gmail.com"
local cFrom     := "remetente@gmail.com"
local cUser     := "remetente@gmail.com"
local cMsg      := "Teste Email para Gmail"//memoread("carta1.txt")
cPass           := "123456"//alltrim(cdpar000->mpswd)
porta           := 25
pop3            := "imap.gmail.com:993"
if hb_SendMail(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.
   msginfo("ok")
else
   msginfo("no")
endif   
return(.t.)


No seu exemplo, havia junto a função hb_sendmail() que no meu caso está original dentro de alguma lib. Você deve ter pego ela modificada para atender alguma necessidade.

Re: Email pelo Xharbour

MensagemEnviado: 22 Jun 2010 09:00
por gralak
Iai Parcero alaminojunior copiei exatamente a função que vc me passou
e troquei somente os remetentes,destinatario e senha
porem ainda não enviou ...
O fato de eu estar compilando com a Hwgui faz alguma difereça ?

Se tiver alguma idéia aguardo vlw té+++

Re: Email pelo Xharbour

MensagemEnviado: 23 Jun 2010 13:52
por clrod
Olá

Nunca fiz esse teste, mas posso adinatar que tentar enviar uma mensagem pelo SMTP do Gmail sem autenticar a conta, sem ser por protocolo seguro, não vai rolar. Você precisará usar a porta segura (465 se não me engano), fazer toda a comunicação criptografada usando SSL (não sei como se faz isso no xHarbour, apenas no Harbour) e precisrá enviar um pedido de autenticação em uma conta válida no Gmail antes de enviar a mensagem em si.

O caminho é esse, agora espero que alguém possa te ajudar mais detalhadamnete com a implementação desses passos.

T+

Re: Email pelo Xharbour

MensagemEnviado: 23 Jun 2010 14:43
por alaminojunior
clrod escreveu:mas posso adinatar que tentar enviar uma mensagem pelo SMTP do Gmail sem autenticar a conta, sem ser por protocolo seguro, não vai rolar. Você precisará usar a porta segura (465 se não me engano)

Aqui comigo simplesmente funciona usando o exemplo que postei. Porta 25.
E tem um cliente que também usa a porta 25, servidor Gmail, no ACBrNFeMonitor, porém com o recurso de conexão segura SMTP habilitado.

Verifique se o antivírus não está barrando os e-mail´s de saída.

Re: Email pelo Xharbour

MensagemEnviado: 13 Jul 2010 15:53
por gralak
Caros amigos que tnato me ajudaram na parada do email
finalmente consegui estou utilizando uma ferramenta chamada
CDOSYS que faz essa autentificação dica passada pelo amigo Leonardo
vlw pela atenção galera se eu puder ajudar alguém com a mesma duvida e só chamar
até++++++++++++ :D :D :D

Re: Email pelo Xharbour

MensagemEnviado: 13 Jul 2010 19:13
por rochinha
Amiguinho,

Esta mensagem indica que o objeto CDO não foi criado ou voce esta tentando acessar um método ou propriedade não existente nele.

Em tempo as portas de acesso ao Live.com são 25 e 995

Em todo o caso mesmo correndo o risco de apresentar algo já colocado aqui, eu também uso CDO para envio de emails:
...
  Private aProvedor := { { "UOL (Universo On-Line)"  ,'pop.uol.com.br'        ,'smtp.uol.com.br'        ,.t., 25,110,.f.},;
                         { "Terra"                   ,'pop.terra.com.br'      ,'smtp.terra.com.br'      ,.t., 25,110,.f.},;
                         { "IG (Internet Generation)",'pop.ig.com.br'         ,'smtp.ig.com.br'         ,.t.,465,995,.t.},;
                         { "iBest"                   ,'pop.ibest.com.br'      ,'smtp.ibest.com.br'      ,.t.,465,995,.t.},;
                         { "iTelefonica"             ,'pop.itelefonica.com.br','smtp.itelefonica.com.br',.t., 25,110,.f.},;
                         { "Gmail (Google Mail)"     ,'pop.gmail.com.br'      ,'smtp.gmail.com.br'      ,.t.,465,995,.f.},;
                         { "Yahoo"                   ,'pop.mail.yahoo.com.br' ,'smtp.mail.yahoo.com.br' ,.t., 25,110,.f.},;
                         { "Hotmail"                 ,'pop3.live.com'         ,'smtp.live.com'          ,.t., 25,995,.t.},;
                         { "BOL (Brasil On-Line)"    ,'pop3.bol.com.br'       ,'smtp.bol.com.br'        ,.t., 25,110,.f.},;
                         { "ITM Networks"            ,'mail.5volution.com.br' ,'mail.5volution.com.br'  ,.t., 25,110,.f.} }
  nPosicao    := 10 //ASCAN( aProvedor, "ITM Networks" )
  smtp_Port   := aProvedor[ nPosicao, 5 ]
  lAuth       := aProvedor[ nPosicao, 4 ]
  smtp_server := aProvedor[ nPosicao, 3 ]
  smtp_SSL    := aProvedor[ nPosicao, 7 ]
  //
  objCDOSYSCon:=TOleAuto():New( "CDO.Configuration" )
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value       := smtp_server
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value   := smtp_Port
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"):Value        := 2
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value := 1
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"):Value     := smtp_user
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value     := smtp_pass
  //objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 30
  objCDOSYSCon:Fields:update()
  objCDOSYSMail:=TOleAuto():New( "CDO.Message" )
  objCDOSYSMail:Configuration := objCDOSYSCon
  objCDOSYSMail:From          := mail_from
  objCDOSYSMail:To            := mail_to
  objCDOSYSMail:Subject       := mail_subject
  if lHtml
     objCDOSYSMail:HTMLBody   := mail_message
  else
     objCDOSYSMail:TextBody   := mail_message
  endif
  objCDOSYSMail:Send()
  ...


No caso de usar o BLAT neste exemplo faço uso de sua .DLL:
...
    BlatCMD := [ blat.txt] + ;
                [ -server ]   + alltrim(cserver) + ;
                [ -to ]       + alltrim(cto) + ;
                [ -f ]        + alltrim(cf) + ;
                [ -mailfrom ] + alltrim(cf) + ;
                [ -subject "] + alltrim(csubject) + ["] + ;
                [ -r ]        + ;
                [ -u ]        + alltrim(cu) + ;
                [ -pw ]       + alltrim(cpw) + ;
                [ -log "email.log" -debug ] + ;
                iif( empty( cAttach ),[],[ -attach "] + alltrim(cattach) + ["])
     fErase( "email.log" )
     BlatLOG := SendB( BlatCMD )
...

DLL32 FUNCTION SendB( sBlatString AS STRING ) AS LONG PASCAL ;
      FROM "SendBlat" LIB "Blat.dll"


No dois métodos eu consegui envio de emails para clientes/servidores Hotmail.

No caso de uso intensivo de chamadas via OLE é boa a pratica de criar o objeto já no inicio do programa e deixar sua variavel visivel.

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 17:02
por esbasso
acho que tem algum bug no xharbour
ja tentei de tudo e da o erro

Error CDO.Message/3 DISP_E_MEMBERNOTFOUND: SEND - oError:genCode = 1001
Called from source\rtl\win32ole.prg->TOLEAUTO:SEND(0)
Called from C:\xHarbour\rotinas\hcdoemail.000->ENVIO2(185)
Called from C:\xHarbour\Estoque6\ESTOQUE.000->MAIN(301)

HwGUI 2.17 xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6733)
Date:08/02/11
Time:18:01:25

uma vergonha rsrsrs
funciona em qualquer outra linguagem menso aqui

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 17:38
por marcosgambeta
esbasso escreveu:Error CDO.Message/3 DISP_E_MEMBERNOTFOUND: SEND - oError:genCode = 1001
Called from source\rtl\win32ole.prg->TOLEAUTO:SEND(0)
Called from C:\xHarbour\rotinas\hcdoemail.000->ENVIO2(185)
Called from C:\xHarbour\Estoque6\ESTOQUE.000->MAIN(301)


Basso,

Tente assim:

No lugar de
objCDOSYSMail:Send()
use
objCDOSYSMail:_Send()

Não testei aqui. Estou me baseando em algo que lí certa vez numa discussão (não me recordo se foi na lista de desenvolvedores do Harbour ou do xHarbour).

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 17:59
por esbasso
infelizmente da o mesmo erro

Error CDO.Message/3 DISP_E_MEMBERNOTFOUND: _SEND - oError:genCode = 1001
Called from source\rtl\win32ole.prg->TOLEAUTO:_SEND(0)
Called from C:\xHarbour\rotinas\hcdoemail.prg->ENVIO2(186)
Called from C:\xHarbour\Estoque6\ESTOQUE.000->MAIN(266)

HwGUI 2.17 xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6733)
Date:08/02/11
Time:18:57:10

não consigo entender
pois é o ultimo comando e falha justamente no envio
nas demais propriedades tudo funciona

talvez seja algo no meu xharbour

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 19:32
por sygecom
Olá Basso,
Eu uso exatamente essa função com xHarbour 1.2.1 e funciona perfeitamente, até com Hotmail roda que é uma beleza.
Ex de como uso:

**********************************************************************************************************************
FUNCTION CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,vEMAIL_CONF,wSSL_EMAIL)
**********************************************************************************************************************
local lRet := .f.
local oCfg, oError
local lAut  := .t.

  TRY
    oCfg := CREATEOBJECT( "CDO.Configuration" )
      WITH OBJECT oCfg:Fields
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"             ):Value := cServerIp
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"         ):Value := vPORTSMTP
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"              ):Value := 2
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"       ):Value := lAut
           :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"             ):Value := wSSL_EMAIL
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"           ):Value := alltrim(cUser)
           :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"           ):Value := alltrim(cPass)
           //:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"  ):Value := 30
              :Update()
      END WITH
      lRet := .t.
  CATCH oError
    MsgInfo( "Não Foi possível Enviar o e-Mail!"  +HB_OsNewLine()+ ;
             "Error: "     + Transform(oError:GenCode,   nil) + ";" +HB_OsNewLine()+ ;
             "SubC: "      + Transform(oError:SubCode,   nil) + ";" +HB_OsNewLine()+ ;
             "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +HB_OsNewLine()+ ;
             "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +HB_OsNewLine()+ ;
             "Mensaje: "   + oError:Description, "Atenção" )

  END
  //--> FIM DAS CONFIGURAÇOES.
  if lRet
     lRet := Envia_Mail(oCfg,cFrom,aQuem,aFiles,cSubject,cMsg,aCC,aBCC)
  endif

Return lRet

********************************************************************************
FUNCTION ENVIA_MAIL(oCfg,cFrom,cDest,aFiles,cSubject,cMsg,aCC,aBCC,vEMAIL_CONF)
********************************************************************************
  local aTo := {}
  local lRet := .f.
  local nEle, oError

  aTo      := { cDest } //--> PARA
  nEle := 1

   for i:=1 to len(aTo)
       TRY
         oMsg := CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                :Configuration = oCfg
                :From = cFrom
                :To = aTo[i]
                :Cc = aCC
                :BCC = aBCC
                :Subject = cSubject
                :TextBody = cMsg
                For x := 1 To Len( aFiles )
                    :AddAttachment(AllTrim(aFiles[x]))
                Next
                IF vEMAIL_CONF=.T.
                   :Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
                   :Fields:update()
                ENDIF
                :Send()
           END WITH
           lRet := .t.
       CATCH oError
           MsgInfo("Não Foi Possível Enviar," +HB_OsNewLine()+;
                         "a Mensagem: "             +HB_OsNewLine()+;
                               cSubject                   +HB_OsNewLine()+;
                               "p/ o eMail: " + aTo[i] +HB_OsNewLine()+;
                   " - Erro: " + + oError:Description , "Atenção" )
           lRet := .f.
       END
   next

Return lRet

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 19:34
por sygecom
Veja que minha função está dentro de um TRY, é que as vezes se não configurar corretamente pode cair no erro mesmo, mas é só configurar certinho, usuario, senha, endereço smtp, se tem SSL e etc.. que vai certinho.

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 20:08
por esbasso
MESMO ERRO usando sua função, tirei o TRY para poder colar o erro aqui

rror CDO.Message/3 DISP_E_MEMBERNOTFOUND: SEND - oError:genCode = 1001
Called from C:\xHarbour121\source\rtl\win32ole.prg->TOLEAUTO:SEND(0)
Called from C:\xHarbour\rotinas\hcdoemail.000->CDO_ENVIA_MAIL(258)
Called from C:\xHarbour\rotinas\hcdoemail.000->CONFIG_MAIL(225)
Called from C:\xHarbour\Estoque6\ESTOQUE.000->MAIN(268)

HwGUI 2.17 xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6733)

este erro não é questão de configurar
mas da falta de propriedade ou metodo do objeto OLE
a não ser que esta retornando uma mensagem errada sobre o erro

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 21:10
por sygecom
É no mínimo estranho mesmo. Testei aqui com Windows 7 e com Windows XP e deu certo...

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 21:47
por alaminojunior
Eu já notei erros como este, quando acontecía de não encontrar os arquivos para anexar. Não sei se é o caso.

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 22:01
por esbasso
sim
resolvido
na realidade a mensagem não significa exatamente o que se supõe

MSDN:

Invoke returns DISP_E_MEMBERNOTFOUND if one of the following conditions occurs:
A member or parameter with the specified DISPID and matching cArgs cannot be found, and the parameter is not optional.
The member is a void function, and the caller did not set pVarResult to Null.
The member is a read-only property, and the caller set wFlags to DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF.

então o que ocasionava o erro era um erro de configuração
no caso foi esta linha
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .F. //wSSL_EMAIL

SÓ FUNCIONA no meu caso se for FALSO

Re: Email pelo Xharbour

MensagemEnviado: 08 Fev 2011 22:27
por alaminojunior
Mas e se o servidor exigir que seja SSL ?
Não sei, não me lembro se faz alguma diferença (faz algum tempo que codifiquei esta função no sistema) mas eu linkey junto a tipssl.lib.

Re: Email pelo Xharbour

MensagemEnviado: 24 Fev 2011 09:58
por Wesllen
Bom dia,

Aproveitando o Topic.... alguém conhece uma forma de anexar arquivo html para enviar junto com arquivos XML?
Estou tentando fazer isso mas sempre que anexo o html dá erro e a mensagem não é enviada. Se eu retiro o html a mensagem segue normalmente.
Preciso fazer isso que que as NFe já sejam enviadas com os respectivos boletos.

Obs. uso o HB_SENDMAIL.

Agradeço pela ajuda.

[]'s

Re: Email pelo Xharbour

MensagemEnviado: 24 Fev 2011 12:43
por rochinha
Amiguinhos,

Para o envio via CDO estou usando somente este trecho na configuração:
  objCDOSYSCon:=TOleAuto():New( "CDO.Configuration" )
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value       := smtp_server
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value   := smtp_Port
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"):Value        := 2
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value := 1
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"):Value     := smtp_user
  objCDOSYSCon:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value     := smtp_pass


Lembrando que CDO só vai funcionar se tiver conectado a internet pois ele ira se configurar usando o site da Micro$oft.

Para o envio de conteúdo em texto plano ou HTML eu faço assim:
...
  objCDOSYSMail:Configuration := objCDOSYSCon
  objCDOSYSMail:From          := mail_from
  objCDOSYSMail:To            := mail_to
  objCDOSYSMail:Subject       := mail_subject
  if lHtml // critica se quero HTML ou Texto plano
     objCDOSYSMail:HTMLBody   := mail_message // + CRLF + CRLF + MemoRead( mail_attach )
  else
     objCDOSYSMail:TextBody   := mail_message // + CRLF + CRLF + MemoRead( mail_attach )
  endif


No BLAT eu faço assim:
     BlatCMD := [ blat.txt] + ;
                [ -to ]       + alltrim(cto) + ;
                [ -server ]   + alltrim(cserver) + ;
                ...
                iif( lHtml, [ -html ], [] )


Para o BLAT.TXT faço assim:
...
    if lHtml
        cBody := FormHtml( cSubject, cBody )
     endif
     memowrit( "blat.txt", cbody )
...


Function FormHtml( cSubject, cBody )
   Local cOpen  := '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">' + CRLF
   Local cClose := CRLF + 'Nossa empresa envia email somente para pessoas e empresas cadastradas em nosso sistema.' + CRLF + ;
                          'Caso tenha duvidas favor entrar em contato com nossa central de atendimento ao cliente.'
   cHTML := ;
      '<html>'  + CRLF + ;
      '<head>'  + CRLF + ;
      '   <meta http-equiv="Content-Type"' + CRLF + ;
      '         content="text/html; charset=iso-8859-1">' + CRLF + ;
      '</head>' + CRLF + ;
      '<body>'  + CRLF + ;
      '<pre>'   + CRLF + ;
       cBody    + CRLF + ;
      '</pre>'  + CRLF + ;
      '</body>' + CRLF + ;
      '</html>'
   Return cOpen + cHTML + cClose

Email pelo Xharbour

MensagemEnviado: 10 Jan 2018 23:41
por Shark
Este tópico é bem antigo mas o meiu problema é idêntico e bem recente. Alguém conseguiu afinal desvendar o mistério do objeto "SEND" não existir no CDO.Message?

Imagino que como está sendo utilizado um recurso externo através de OLE, pode ser um problema relacionado a versões de sistema operacional nao?

Atualmente qual método usado para enviar email usando xHarbour?

Email pelo Xharbour

MensagemEnviado: 11 Jan 2018 08:15
por alaminojunior
Alguém conseguiu afinal desvendar o mistério do objeto "SEND" não existir no CDO.Message?


       TRY
         oMsg:= CREATEOBJECT ( "CDO.Message" )
           WITH OBJECT oMsg
                oMsg:MDNRequested = .T.
                oMsg:Configuration = oCfg
                oMsg:From = cFrom
                oMsg:To = aTo[i]
                oMsg:CC = aCC
                oMsg:BCC = aBCC
                oMsg:Subject = cSubject
                oMsg:Sender = cdpar000->fantasia
                oMsg:ReplyTo = cFrom
                oMsg:Organization = cdpar000->razao
                if !uso
                   cMsg = strtran( cMsg, chr(13)+chr(10) , '<br>' )
                   oMsg:HTMLBody = "<h3>"+cMsg+"</h3>"
                else
                   oMsg:TextBody = cMsg
                endif         
                For x := 1 To Len( aFiles )
                    oMsg:AddAttachment(AllTrim(aFiles[x]))
                Next
                IF vEMAIL_CONF
                   oMsg:Fields("urn:schemas:mailheader:disposition-notification-to"):Value:= cFrom
                   oMsg:Fields("urn:schemas:mailheader:return-receipt-to"):Value:= cFrom
                ENDIF
                oMsg:Fields:update()
                oMsg:Send()
           END WITH

Email pelo Xharbour

MensagemEnviado: 11 Jan 2018 11:47
por rochinha
Amiguinhos,

shark
O CDO é bem antigo e vinha automaticamente implantado nos Windows antes da versão 7. Após isto a CDOSYS.DLL até vem, mas depende de instalação, manual ou automatica pelo Programas e Recursos no que se refere a Rede e Exchange.

Procure por *cdo* na pasta System32 ou SYSWOW64 e registre na unha. Lembrando de estar no prompt com direitos Administrador.

Direitos de Administrador não é o mesmo que usar o usuário Administrador. Algumas instalações do Windows escondem o verdadeiro administrador. Para encontrá-lo:

net user administrador /active:yes
ou
net user administrator /active:yes

Email pelo Xharbour

MensagemEnviado: 14 Jan 2018 00:41
por Shark
Rochinha Amiguinho...

Seguindo o conceito de sua orientação: devo deduzir que para utilizar o método de envio de email usando "CDO" terei que intervir em cada máquina/windows de meus clientes? Pelo que entendi é mais ou menos isso que sugere. Confirma?

Email pelo Xharbour

MensagemEnviado: 14 Jan 2018 01:43
por rochinha
Amiguinhos,

shark
Com certeza, pois se o cdosys.dll, mesmo existindo não estiver registrado o recurso não funcionará. Lembrando que a Microsoft desligou alguns recursos que ficam presentes na instalação mas inativos sendo ativados após configurações nos recursos da máquina.

Digite cdosys.dll windows 7 download no Google e veja os cinco primeiros resultados. Te levam para baixar a .DLL correspondente ao S.O outros podem te levar a baixar "Fixers" que na verdade mentem que falta uma ou outra coisa e fazer voce baixar um programa que não faz nada e te dá prejuízo.

https://www.dll4free.com

[url=http://www.dlldownloader.com/cdosys-dll/]http://www.dlldownloader.com[/url

https://pt.dll-files.com

http://originaldll.com

Após baixar passe o Antivirus nos arquivos e copie para a pasta System32 e registre-os. Entre no seu aplicativo e veja se funciona.

Eu também baixei mas não tenho prvisão de quando farei o teste.

Email pelo Xharbour

MensagemEnviado: 14 Jan 2018 03:01
por Shark
Amigão... (Rochinha)

Visto que esta intervenção profunda no windows dos usuários de nossos softwares não é tecnologicamente digna (apesar de possível), qual seria a melhor solução, afinal, para tratar email´s por nós programadores do moribundo, mas, persistente clipper word? Confesso que estou profundamente indignado com essa limitação considerando tratamento de emails uma técnica extremamente retrograda. Diga lá irmão... Como saltar essa barreira?

Email pelo Xharbour

MensagemEnviado: 14 Jan 2018 08:02
por alaminojunior
Sem querer duvidar do nosso amiguinho Rochinha, não tenho tido reclamação sobre isso por parte dos clientes.
E temos sistema instalados em várias versões de Windows: XP, Seven, 8, 10 ...

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 09:21
por Daniel
Acho que voce esta usando o comando WITH errado

WITH OBJECT oMsg
                :MDNRequested = .T.
                :Configuration = oCfg
                :From = cFrom
                :To = aTo[i]
                :CC = aCC
                :BCC = aBCC
                :Subject = cSubject
                :Sender = cdpar000->fantasia
                :ReplyTo = cFrom
                :Organization = cdpar000->razao
                if !uso
                   cMsg = strtran( cMsg, chr(13)+chr(10) , '<br>' )
                   :HTMLBody = "<h3>"+cMsg+"</h3>"
                else
                   :TextBody = cMsg
                endif         
                For x := 1 To Len( aFiles )
                    :AddAttachment(AllTrim(aFiles[x]))
                Next
                IF vEMAIL_CONF
                   :Fields("urn:schemas:mailheader:disposition-notification-to"):Value:= cFrom
                   :Fields("urn:schemas:mailheader:return-receipt-to"):Value:= cFrom
                ENDIF
                :Fields:update()
                :Send()
           END WITH

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 09:54
por alaminojunior
Daniel, pode até ser, mas tem funcionado assim há uns 10 anos.
Poderia apontar o que achou estranho ?

Obrigado !

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 10:07
por JoséQuintas
TÁ TUDO ERRADO!!!!!

Começou dizendo que foi a mesma mensagem de erro do post.
O ponto principal é: QUAL FOI A MENSAGEM DE ERRO?

Muito provavelmente é uma questão já muito falada no fórum, que dependendo da LIB gráfica o XHarbour funciona de um jeito.

OLE é o uso de recursos existentes no Windows, usando um tipo de ligação entre o programa e o recurso do Windows.

No Harbour isso é feito usando win_OleCreateObject().
No XHarbour depende da LIB gráfica, pode ser CreateObject(), TOleAuto(), xhb_CreateObject(), ou outra coisa diferente que inventaram.
O erro não é na linha da função, o erro é na hora do uso do OLE, dependendo do que está sendo usado, geralmente no Send().

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 10:38
por alaminojunior
No XHarbour depende da LIB gráfica, pode ser CreateObject(), TOleAuto(), xhb_CreateObject(), ou outra coisa diferente que inventaram.
O erro não é na linha da função, o erro é na hora do uso do OLE, dependendo do que está sendo usado, geralmente no Send().


Na HwGui salvo engano meu (pois já procurei) não existe equivalente, e com isso assumo que está usando a que vem nos fontes do xHarbour.

E minhas rotinas de e-mail tem funcionado normalmente.

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 11:19
por JoséQuintas
Acho que voce esta usando o comando WITH errado


Daniel, o WITH OBJECT até está inútil, mas funciona mesmo assim.

Volto ao que postei:
QUAL A MENSAGEM DE ERRO?

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 11:39
por Daniel
Quintas
A minha observação seria só sobre o WITH Objeto mesmo
que com ele ou sem funciona do mesmo jeito

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 21:14
por Shark
Tenho tentado usar estes códigos para enviar email mas recebo este erro:

Error description: Error CDO.Message/3 DISP_E_MEMBERNOTFOUND: SEND

Stack Calls
===========
Called from: => TOLEAUTO:SEND( 0 )
Called from: GMAIL.prg => MAIN( 27 )

Email pelo Xharbour

MensagemEnviado: 15 Jan 2018 22:11
por alaminojunior
Provedores como Gmail, Yahoo entre outros, exigem que você ative no painel de controle da sua conta o recurso de fazer login a partir de aplicativos menos seguros.

Faça isso.

Email pelo Xharbour

MensagemEnviado: 16 Jan 2018 22:32
por rochinha
Amiguinhos,

Editei meu post várias vezes e ainda deixei erros.

Vamos lá:
alaminojunior
Se você usa o objeto CDO para o envio dos emails a contento isso é boa notícia.

shark
Eu coloquei em meu sistemas vários motores de envio, alguns já ficaram obsoletos, mas a codificação ficou lá. Não deu ainda para podar e deixar um único.

Eu uso o blat.exe via command line(quando o prompt permite), mas algumas vezes uso a blat.dll via OLE.

O problema do Blat é que no caso do Gmail, o servidor SMTP necessita autenticação via SSL na porta 465 ou 587 como podem ver na página de ajuda do Google. Por isso utilizamos o programa, também grátis chamado Stunnel que ajuda o Blat a encaminhar o email de forma segura utilizando SSL na porta smtp do Gmail.

Para ele funcionar é necessário instalar o stunnel(https://www.stunnel.org/?page=downloads). Mas como você falou, tem de mexer nas entranhas do pc do usuário.

Outro dia encontrei o SwithMail.exe. Se digitar no Google dá pra encontrar já que não gravei o site.

Linha de comando:
SwithMail.exe /s /b corpo.txt /a "C:\SISTEMA\REMESSA\NFE110110*.ZIP" /Server smtp.gmail.com /ssl /p 587 /to irochinha@hotmail.com.br /sub "Arquivos da Nota Fiscal Eletronica - Carta de Correcao" /from meuemail@gmail.com /name meuemail@gmail.com /pass minhasenha$321


Se você digitar somente SwithMail.exe uma tela de configuração aparecerá e poderá ser feita a configuração e salva em XML.

A partir daí poderá ser chamado via linha de comando. Procure por exemplos.

Email pelo Xharbour

MensagemEnviado: 16 Jan 2018 23:39
por Shark
Dei uma lida nas especificações do SwithMail e no que ele se propõem a fazer Rochinha.

Caso não consiga efetivamente usar funções nativas e códigos xharbour para a tarefa, vou apelar pra esse programa externo aí mesmo.

O que me causa estranheza, é uma funcionalidade tão básica como enviar um simples email, demonstrar-se inexplicavelmente assim: tão complexa e anti funcional.

Acho que deveria existir uma função tipo SendMail( cFrom, cText, aFiles )

Apenas isso enviaria a porcaria do email. Como? usando uma conta default provida pela linguagem. Tipo: se o programador não informar o email, usa-se essa conta default e o email chega no destino assim mesmo.

É uma pena isso não existir.

Me pego a imaginar: se pra enviar um email é essa novela todo, como será receber?

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 08:46
por JoséQuintas
Error description: Error CDO.Message/3 DISP_E_MEMBERNOTFOUND: SEND


Isso significa que não existe Send() no objeto que foi criado.

Possibilidades:

- Escreveu o nome errado no CreateObject()
- Não existe o recurso no Windows
- Equivalente a win_OleCreateObject() que foi usado não funciona como deveria

Por enquanto não tem nada a ver com porta 587, comunicação segura, etc.
Tem a ver com não funcionar/existir CDO na variável.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 08:51
por JoséQuintas
Exemplo do que mencionei:

x := CreateObject( "algo que nao existe" )
x:Send()


Provavelmente isso vai gerar o mesmo erro, porque não existe o objeto indicado.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 09:30
por alaminojunior
Ele ainda não respondeu se já ativou o login em aplicativos menos seguros no painel do Gmail.
Se não fizer essa configuração, vai retornar esse mesmo erro.
Digo por experiência própria.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 11:47
por rochinha
Amiguinhos,

Me pego a imaginar: se pra enviar um email é essa novela todo, como será receber?

Receber, nunca consegui.

alaminojunior
Entendo que se fosse problema de habilitar algo lá fora, o erro se daria pelo retorno de email do GMail confirmando a impossiblidade. Ao que parece o erro é pela não existência do método no objeto sendo usado.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 13:39
por JoséQuintas
Novamente.
Tá tudo errado, não existe fonte pra analisar, apenas menciona sobre Send() não funcionar.
Novamente: não tem a ver com GMAIL, PORTA, WITH, nada...

Outro exemplo prático:

cdo.png

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 13:43
por JoséQuintas
Usando a tranqueira original que vém com XHarbour:

xharbour.png

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 13:46
por JoséQuintas
Usando outra tranqueira original do XHarbour, que dá no mesmo:

xharbour2.png

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 13:50
por JoséQuintas
Conclusão:
Se usar o que vém no XHarbour... não vai funcionar nunca.
Vai depender do que existir nas LIBs adicionais do XHarbour ou em LIB gráfica.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 14:07
por alaminojunior
Acabo de testar usando as minhas tranqueiras do xHarbour, que diga-se de passagem, tem sustentado a empresa e a família há anos.
Cada dia mais orgulhoso dessa tranqueira véia !!!

A rotina que o colega me enviou por e-mail para análise, funciona !
Enviei o e-mail e simplesmente chegou.

Detalhe que havia passado despercebido antes:
os parâmetros aCC e aBCC se estiverem vazios, ou comente-os ou deixe-os em branco ''. Se passar {} ocorre o erro;

Feito esse ajuste, o e-mail foi enviado.

Lembrando sempre a ativação de login em aplicativos menos seguros precisa estar ativada no painel do Gmail.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 14:26
por JoséQuintas
Ou provavelmente a rotina que enviaram por email tem uma função substituta pro CreateObject()

Se for com o CreateObject() do XHarbour, significa que ele funciona diferente de tudo que existe.
No Visual Basic 6, mesma mensagem do Harbour.

vb63.png

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 14:36
por alaminojunior
Ou provavelmente a rotina que enviaram por email tem uma função substituta pro CreateObject()

Não, está pura e simples somente com as chamadas para CreateObject. Utilizei a minha que está no pacote do xHarbour (win32ole.prg).

Inclusive agora até mandei com cópia para ele.

Calma Quintas, não há nada de errado com a CreateObject do xHarbour.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 14:42
por Kapiaba
Eu também uso as "tranqueiras" do xHarbour, e não troco por nada. Funciona de 1000 maravilhosas. Mas nem por isso, vou menosprezar o harbour.

XHBEMAIL.png


Abs

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 14:50
por JoséQuintas
Estou me referindo apenas ao CreateObject() que vém no XHarbour.
Isso vém sendo discutido em vários tópicos, há algum tempo.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 15:21
por Kapiaba
Mister Quintas mas é essa "tranqueira"(CREATEOBJECT) do xHarbour que eu uso, e funciona SHOW().

   TRY

      oCfg := CREATEOBJECT( "CDO.Configuration" )

      WITH OBJECT oCfg:Fields

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"       ):Value := cServSMTP // Servidor SMTP

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"   ):Value := nPort

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"        ):Value := 2 // Remote SMTP = 2, local = 1

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := lAut

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"       ):Value := lSSL  // .F. Ou .T.

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"     ):Value := TRIM(cUser)

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/sendtls" ):Value = lTLS  // Com office365, nao funciona nem a pau.

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"     ):Value := TRIM(cPass)

         oCfg:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 60  // timeout  // era 30

         oCfg:Update()

      END WITH

      lRet := .T.

   CATCH oError

      MsgInfo( "Não Foi Possível Enviar o E-Mail!"  +CRLF+ ;
               "Verifique o Remetente            "  +CRLF+ ;
               "Verifique o Destinatário         "  +CRLF+ ;
               "Error: "     + Transform(oError:GenCode,   nil) + ";" +CRLF+ ;
               "SubC: "      + Transform(oError:SubCode,   nil) + ";" +CRLF+ ;
               "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +CRLF+ ;
               "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
               "Mensajem: "  + oError:Description, "Atenção " )

   END


Abs.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 15:23
por JoséQuintas
Não é não.

Tem nas LIBs gráficas, e na fivewin também.

createobject.png


lib.png

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 16:06
por JoséQuintas
Talvez a pergunta correta seja:

Usa CreateObject() no XHarbour, qual das CreateObject() ?

E esse foi o motivo de eu ter chamado o CreateObject() do Xharbour de tranqueira.

Com certeza, se estivesse ok, as LIBs já teriam removido isso delas há muito tempo.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 16:09
por Kapiaba
Deixe pra lá Mister Quintas. Se entendi a dúvida do Usuário <Shark>, o problema é com gmai.com. Aqui, neste tópico, eu ensino como configurar.

http://fivewin.com.br/index.php?/topic/26829-erro-ao-enviar-e-mail-via-cdomessage-e-gmail/#comment-278073

Abs.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 16:20
por alaminojunior
o problema é com gmai.com. Aqui, neste tópico, eu ensino como configurar.


O problema do colega a princípio é com o tipo de parâmetro enviado. Por isso o objeto CDO.xxxx não é criado.
Parâmetros aCC e aBCC são esquisitos. Ao contrário do parâmetro de destinatário que aceita uma array com os endereços, estes dois aceitam somente um string com os endereços.

Eu também já havia alertado sobre a configuração do Gmail, que também ocorre com Yahoo e outros. Se não ativar, o e-mail não passa.

Email pelo Xharbour

MensagemEnviado: 17 Jan 2018 20:16
por JoséQuintas
Isso explica não funcionar gmail, mas acho que não explica a mensagem de erro.
A não ser que seja um "sub-erro", e retorna como se fosse erro na chamada principal, o que acho difícil.

Email pelo Xharbour

MensagemEnviado: 25 Abr 2018 22:34
por Shark
Agradeço a todos que participaram do tópico.

Resumo: o código utilizando CDO funciona muito bem. Entretanto, se passarmos parâmetros com espaços no inicio ou no final das strings, parâmetros vazios o qualquer parâmetro inválido dá esse erro DISP_E_MEMBER_NOTFOUND.

O tipo de mensagem de erro é que é inadequada e nos remete a pensar que é um erro de classe ou algo interno.

Enviar email já está resolvido!

Agora, Gostaria de aproveitar o tópico para saber se algum colega consegue receber e-mails via código e qual método utiliza.

Email pelo Xharbour

MensagemEnviado: 26 Abr 2018 19:27
por rochinha
Amiguinhos,

shark
Enviar email já está resolvido!

Como? pode mostrar o seu código e de preferência dizer qual versão de Windows você usa.

Gostaria de sugerir aos amigos que esquecessem o CDO.Messaging pois é uma tecnologia que só se comporta bem em Windows Server 2003/2008 e com sorte no Windows Seven.

Eu tenho em meu sistema pelo menos 10 motores de envio de email, pois se um falhar ainda tenho 9, sendo eles executáveis externos, vbScript, Python, OCX e DLL.

Todos funcionavam a contento até que começaram a travar portas e exigir acesso a 995/587 e alguns dos meus motores não tinha estas definições.

shark
Agora, Gostaria de aproveitar o tópico para saber se algum colega consegue receber e-mails via código e qual método utiliza.

Sugiro abrir outro tópico para trabalharmos somente sobre o mesmo.

Email pelo Xharbour

MensagemEnviado: 20 Mai 2018 06:11
por Shark
Rochinha... Uso com CDO.MESSAGE e funciona bem no windowsxp, windows7 e windows10. Tenho máquinas com todas essas versões e em todas elas funcionam perfeitamente.

Segue o códígo:
*************************************************************************************************************************************

IF lShowMsg

   aProgress[6]:SetText( "Criando variáveis de configurações..." )

   aProgress[2]:SetPos(40)

   SYSREFRESH()

ENDIF

TRY

  oCfg := CREATEOBJECT( "CDO.Configuration" )

  WITH OBJECT oCfg:Fields
       :Item("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value:= cServ
       :Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value:= nPort
       :Item("http://schemas.microsoft.com/cdo/configuration/sendusing"):Value:= 2
       :Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"):Value:= nAut
       :Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl"):Value:= nSSL
       :Item("http://schemas.microsoft.com/cdo/configuration/sendusername"):Value:= cUser
       :Item("http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value:= cPass
       :Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value:= 60
       :Update()
  END WITH

CATCH oError

  IF lShowMsg
     Pc_UnProgress( aProgress )
     Pc_Alert( "Não foi possível criar o EMAIL!" + CRLF + "Verifique configurações de e-mail" + CRLF + "Erro: "  + IF( oError:Description = NIL, " ", oError:Description ) )
  ENDIF

  RETURN( .F. )

END

IF lShowMsg

   aProgress[2]:SetPos(60)

   aProgress[6]:SetText( "Criando email..." )

   SYSREFRESH()

ENDIF

TRY

  oMsg := CREATEOBJECT( "CDO.Message" )

  WITH OBJECT oMsg

       :MDNRequested  := .T.
       :Configuration := oCfg
       :From          := cFrom
       :To            := cTo
       :Subject       := cSubject
       :Sender        := cSender
       :Replyto       := cFrom

       IF lHtml
          :HTMLBody = "<h3>" + cBody + "</h3>"
       ELSE
          :TextBody      := cBody
       ENDIF

       FOR nFor = 1 TO LEN( aFiles )

           IF FILE( aFiles[ nFor ] )

              IF lShowMsg

                 aProgress[2]:SetPos( 80 + nFor )

                 aProgress[6]:SetText( "Anexando arquivos..." )

                 SYSREFRESH()

              ENDIF

              :AddAttachment( aFiles[ nFor ] )

           ENDIF

       NEXT

       :Fields:Update()

       IF lShowMsg

          aProgress[2]:SetPos( 100 + LEN( aFiles ) )

          aProgress[6]:SetText( "Enviando E-MAIL..." )

          SYSREFRESH()

       ENDIF

        SysWait(0.5)

       :Send()

  END WITH

CATCH oError

  IF lShowMsg

     Pc_UnProgress( aProgress )

     Pc_Alert( "Erro no Envio de E-MAIL: " + CRLF + cSubject + CRLF + "Para: " + cTo + CRLF + "Erro: " + IF( oError:Description = NIL, " ", oError:Description ) )

  ENDIF

  RETURN( .F. )

END

IF lShowMsg

   Pc_UnProgress( aProgress )

ENDIF

RETURN( .T. )

Email pelo Xharbour

MensagemEnviado: 21 Mai 2018 11:40
por pauloa1
Olá Shark!

Eu uso com sucesso Uso com CDO.MESSAGE. pra enviar email.

Só tenho um problema que não consegui resolver.

Se eu anexar um arquivo, o mesmo fica "bloqueado" pelo windows.
caso eu queira por exemplo, excluir logo após enviar o email, só se o usuário sair e entrar novamente na aplicação.

Pesquisei e não achei uma forma de fechar o CDO.MESSAGE, como existe no excel por exemplo.

Paulo

Email pelo Xharbour

MensagemEnviado: 21 Mai 2018 12:15
por Kapiaba
Tente assim:

   oCfg := Nil

   oMsg := Nil

Email pelo Xharbour

MensagemEnviado: 21 Mai 2018 15:28
por pauloa1
Já tentei isso também e não fecha.

Email pelo Xharbour

MensagemEnviado: 21 Mai 2018 15:54
por Kapiaba
Como você anexa? Veja se ajuda:

   PUBLIC NewAnexo

   cXml := cDirPleno + "\REMESSA\ENVIADAS\" + ALLTRIM( cChave ) + "nfe.xml"
   cAnexoNfeCAN := cDirPleno + "\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + "-can.xml"
   cAnexos := "C:\NFEPDF\NFE" + ALLTRIM( STR(NFECOD2) + ".PDF" )
   cAnexoNfeCCe := cDirPleno + "\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                               "-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

   NewAnexo := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar - Email direto
   aFiles   := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar: Aqui e no windows live

   FOR x := 1 To Len( NewAnexo )  // Anexos dos Email aqui

      IF NewAnexo[x] <> NIL
         oMsg:AddAttachment(ALLTRIM(NewAnexo[x]))
      ENDIF

   NEXT

Email pelo Xharbour

MensagemEnviado: 22 Mai 2018 20:09
por JoséQuintas
Tive um problema parecido hoje....
Os arquivos do site ficaram presos no FTP.
Só liberou depois que reiniciei o Windows 10.

O incrível: arquivos do site presos no Windows 10 !!!! não os arquivos locais.

É a Microsoft fazendo coisas que não deve, como sempre.
Se no site faz isso, local então.....

Talvez fazer estilo Windows: copia pra pasta TEMP, anexa na TEMP, e deixa por lá.... rs

Email pelo Xharbour

MensagemEnviado: 20 Set 2020 11:51
por rossine
Boa tarde,


Só tenho um problema que não consegui resolver.

Se eu anexar um arquivo, o mesmo fica "bloqueado" pelo windows.


Alguém conseguiu achar a solução deste problema ?

Obrigado,

Email pelo Xharbour

MensagemEnviado: 20 Set 2020 20:07
por rochinha
Amiguinhos,

CDO.Messaging já deve estar abandonado pela Microsoft. O problema de ficar com anexos presos é devido ao fato que o mesmo deva estar sendo uploaded e não termina.

Email pelo Xharbour

MensagemEnviado: 20 Set 2020 23:28
por alaminojunior
Boa noite !
Tenho usado envio de e-mail com essa CDO há muitos anos, e até hoje não percebi esse problema.

Email pelo Xharbour

MensagemEnviado: 21 Set 2020 11:20
por rossine
Bom dia,

Testei aqui novamente e o problema do arquivo ficar "bloqueado" só ocorre quando por algum motivo ocorre algum erro no envio do email e vai para o "catch". Quando ele é enviado corretamente, o arquivo em anexo não fica bloqueado.


   try
      oCfg := Win_OleCreateObject( "CDO.Configuration" )

      with Object oCfg:Fields
          :Item( cdoSMTPServer ):Value     := alltrim( cMailServer )
          :Item( cdoSMTPServerPort ):Value := nPort
          :Item( cdoSendUsing ):Value      := nSendOpt

          if lAuth
             :Item( cdoSMTPAuthenticate ):Value := 1
             :Item( cdoSendUserName ):Value     := alltrim( cUser )
             :Item( cdoSendPassword ):Value     := alltrim( cPass )
             :Item( cdoSMTPUseSSL ):Value       := .T.
          endif

          :Item( cdoSMTPConnectionTimeout ):Value := 30

          :Update()
      end with

      oMsg := Win_OleCreateObject( "CDO.Message" )

      with Object oMsg
         :Configuration := oCfg
         :From          := Trim( cFrom )
         :To            := Trim( cTo )
         :Subject       := Trim( cSubject )
         :HTMLBody      := Trim( WIN_ANSITOOEM(cBody) )

         if !empty( aAttach )
            for nEle := 1 To Len( aAttach )
                :AddAttachment( alltrim( aAttach[ nEle ] ) )
            next
         endif

         if !Empty( cBCC )
            :BCC := Trim( cBCC )
         endif

         :Send()

      end with

    catch oError

  *****************************************************************************
  ********** Quando passa por aqui, o arquivo fica bloqueado ********
  *****************************************************************************

         cMsg := "Não consegui enviar email para [" + cTo + "]"           + CRLF + CRLF + ;
                 "Erro CDO.: " + hb_valtoexp(win_oleErrorText()) + CRLF + ;
                 "Error....: " + hb_valtostr( oError:GenCode)             + CRLF + ;
                 "SubC.....: " + hb_valtostr( oError:SubCode )            + CRLF + ;
                 "OSCode...: " + hb_valtostr( oError:OsCode )             + CRLF + ;
                 "SubSystem: " + hb_valtostr( oError:SubSystem )          + CRLF + ;
                 "Mensagem.: " + oError:Description                       + CRLF + ;
                 "Operação.: [" + hb_valtostr(oError:Operation) + "]"     + CRLF + ;
                 "Argumento: [" + hb_valtostr(oError:Args) + "]"          + CRLF + ;

         alerta( cMsg )
   end try

   oCfg := NIL
   oMsg := NIL


Email pelo Xharbour

MensagemEnviado: 21 Set 2020 13:53
por rochinha
Amiguinhos,

rossine
Troque:
...
          :Send()
...


Por:
...
        ?  :Send()
...


Veja se mostra algum retorno.

Aumente o timeout para 60 também

Email pelo Xharbour

MensagemEnviado: 21 Set 2020 14:59
por rossine
Olá Rochinha,

O Erro ocorre instantaneamente sem precisar do timetout, mesmo eu mudando para 60 , ocorre o erro.

Eu usei um "email" ficticio para teste e ocorre o erro abaixo:

Não consegui enviar email para [xsdfsdfsd]

Erro CDO.:
Error....:          1
SubC.....:       1007
OSCode...:          -2147352567
SubSystem: WINOLE
Mensagem.: Pelo menos um destinatário é necessário, mas nenhum foi encontrado. (0x8004020C)
Operação.: [SEND]
Argumento: [NIL]


Eu até tentei desviuncular os arquivos anexados a mensagem, mas não resolveu:

   try
...
    catch oError
...
        oMsg:Attachments:DeleteAll()
...
   end try
   oCfg := NIL
   oMsg := NIL


...então acredito ter outro caminho para resolver isto ou deve ser algum bug mesmo da CDOSYS.

Obrigado,

Email pelo Xharbour

MensagemEnviado: 21 Set 2020 23:59
por alaminojunior
Rossine, por favor poderia nos dizer como você pega estes retornos ? Mais precisamente este referente a "Mensagem"

rossine escreveu:Olá Rochinha,

O Erro ocorre instantaneamente sem precisar do timetout, mesmo eu mudando para 60 , ocorre o erro.

Eu usei um "email" ficticio para teste e ocorre o erro abaixo:

Não consegui enviar email para [xsdfsdfsd]

Erro CDO.:
Error....:          1
SubC.....:       1007
OSCode...:          -2147352567
SubSystem: WINOLE
Mensagem.: Pelo menos um destinatário é necessário, mas nenhum foi encontrado. (0x8004020C)
Operação.: [SEND]
Argumento: [NIL]


Eu até tentei desviuncular os arquivos anexados a mensagem, mas não resolveu:

   try
...
    catch oError
...
        oMsg:Attachments:DeleteAll()
...
   end try
   oCfg := NIL
   oMsg := NIL


...então acredito ter outro caminho para resolver isto ou deve ser algum bug mesmo da CDOSYS.

Obrigado,

Email pelo Xharbour

MensagemEnviado: 22 Set 2020 13:33
por rossine
Olá Junior

Eu faço assim:

   try

...

   catch oError

         cMsg := "Não consegui enviar email para [" + cTo + "]"           + CRLF + CRLF + ;
                 "Erro CDO.: " + win_oleErrorText() + CRLF + ;
                 "Error....: " + hb_valtostr( oError:GenCode)             + CRLF + ;
                 "SubC.....: " + hb_valtostr( oError:SubCode )            + CRLF + ;
                 "OSCode...: " + hb_valtostr( oError:OsCode )             + CRLF + ;
                 "SubSystem: " + hb_valtostr( oError:SubSystem )          + CRLF + ;
                 "Mensagem.: " + oError:Description                       + CRLF + ;
                 "Operação.: [" + hb_valtostr(oError:Operation) + "]"     + CRLF + ;
                 "Argumento: [" + hb_valtostr(oError:Args) + "]"          + CRLF

         lRet := .F.
   end try


Email pelo Xharbour

MensagemEnviado: 22 Set 2020 14:00
por alaminojunior
Sim, também faço desta maneira com exceção de um ponto que não conhecia:

"Erro CDO.: " + win_oleErrorText()
// Essa eu não uso !

Pelo que percebi você recebe com win_oleErorText() uma mensagem de texto com a causa do problema, correto ?

O máximo que consigo usando
oError:Description
é uma string que vem algo como DISP_MEMBERNOTFOUND ou algo assim.

Utilizo xHarbour 1.2.3

Obrigado !

Email pelo Xharbour

MensagemEnviado: 23 Set 2020 16:04
por rochinha
Amiguinhos,

rossine
Outra coisa. O erro ocorre de que forma? num lote de emails em sequencia, dá erro em todos ou apenas um específico? Verifique se tem caracteres estranhos(invisíveis), vírgulas, etc nos emails.

A variável cTo recebe apenas o email destinatário, ou estás passando algum array?

Eu não tenho como testar o componente pois meu Windows Seven é capado e dá erro ao tentar instalar componentes do sistema. E CDOSYS é um deles.

Email pelo Xharbour

MensagemEnviado: 24 Set 2020 16:36
por rossine
Boa tarde,

Verificando melhor minha rotina de envio de email, onde não era o foco da minha atenção em descobrir o problema, reparei que minha rotina abre o arquivo a ser enviado para testar se o arquivo está liberado para envio, assim:

function ENVIA_EMAIL( cFile, ... )

...

h := FOpen( cFile )
   
IF (h == -1)
   RETURN .F.
endif

fclose( h )  // <<<<<<< Aqui não tinha esta linha ???????
...

lRet := SendCDOMail( cMailServer, cFrom, cTo, cSubject, cBody, cAttach, cBCC, cUser, cPass, nPort, cFile )

returen lRet



Reparem que eu me esqueci de fechar o arquivo, com isto gerou este problema do "Arquivo ficar travado" no HD. :(

Tenho quase certeza que devo ter pego este código em algum site e ter ajustado aqui para minhas necessidades, então fica a pergunta.
Será que o código já não estava bugado e eu não percebi esta falha ou acidentalmente apaguei esta linha (hehe) ?

Mas de todo caso, peço desculpa pelo "Falso Alarme" por este problema, e refiz os testes aqui e está funcionando corretamente :)

Agradeço ao Rochinha pelas dicas em tentar me ajudar :)

Email pelo Xharbour

MensagemEnviado: 25 Set 2020 17:36
por rochinha
Amiguinhos,

rossine
É pra isto que estamos aqui, para somar. Algumas vezes coisas assim nos tiram os poucos cabelos.