Clipper On Line • Ver Tópico - Email pelo Xharbour
Mudar para estilo Clássico
Projeto Harbour - Compilador de código aberto compatível com o Clipper.
Postar uma resposta

Email pelo Xharbour

26 Abr 2018 19:27

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

20 Mai 2018 06:11

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

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

21 Mai 2018 11:40

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

21 Mai 2018 12:15

Tente assim:

Código:
   oCfg := Nil

   oMsg := Nil

Email pelo Xharbour

21 Mai 2018 15:28

Já tentei isso também e não fecha.

Email pelo Xharbour

21 Mai 2018 15:54

Como você anexa? Veja se ajuda:

Código:
   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

22 Mai 2018 20:09

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

20 Set 2020 11:51

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

20 Set 2020 20:07

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

20 Set 2020 23:28

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

21 Set 2020 11:20

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:

   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

21 Set 2020 13:53

Amiguinhos,

rossine
Troque:
Código:
...
          :Send()
...


Por:
Código:
...
        ?  :Send()
...


Veja se mostra algum retorno.

Aumente o timeout para 60 também

Email pelo Xharbour

21 Set 2020 14:59

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

21 Set 2020 23:59

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

22 Set 2020 13:33

Olá Junior

Eu faço assim:

Código:
   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

Postar uma resposta