Email pelo Xharbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Email pelo Xharbour

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Shark
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 25 Set 2017 21:42
Localização: Brasília - DF

Email pelo Xharbour

Mensagem 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:

Código: Selecionar todos

*************************************************************************************************************************************

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. )
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

Email pelo Xharbour

Mensagem 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
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Email pelo Xharbour

Mensagem por Kapiaba »

Tente assim:

Código: Selecionar todos

   oCfg := Nil

   oMsg := Nil
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 227
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

Email pelo Xharbour

Mensagem por pauloa1 »

Já tentei isso também e não fecha.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Email pelo Xharbour

Mensagem por Kapiaba »

Como você anexa? Veja se ajuda:

Código: Selecionar todos

   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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Email pelo Xharbour

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Email pelo Xharbour

Mensagem 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,
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Email pelo Xharbour

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Email pelo Xharbour

Mensagem por alaminojunior »

Boa noite !
Tenho usado envio de e-mail com essa CDO há muitos anos, e até hoje não percebi esse problema.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Email pelo Xharbour

Mensagem 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.

Código: Selecionar todos


   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

Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Email pelo Xharbour

Mensagem por rochinha »

Amiguinhos,

rossine
Troque:

Código: Selecionar todos

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

Código: Selecionar todos

...
        ?  :Send()
...
Veja se mostra algum retorno.

Aumente o timeout para 60 também
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Email pelo Xharbour

Mensagem 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:

Código: Selecionar todos

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:

Código: Selecionar todos

   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,
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Email pelo Xharbour

Mensagem 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:

Código: Selecionar todos

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:

Código: Selecionar todos

   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,
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Email pelo Xharbour

Mensagem por rossine »

Olá Junior

Eu faço assim:

Código: Selecionar todos

   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

Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Responder