Página 6 de 7

Email pelo Xharbour

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

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

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

Email pelo Xharbour

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

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

Código: Selecionar todos

   oCfg := Nil

   oMsg := Nil

Email pelo Xharbour

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

Email pelo Xharbour

Enviado: 21 Mai 2018 15:54
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

Email pelo Xharbour

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

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

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

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

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

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


Email pelo Xharbour

Enviado: 21 Set 2020 13:53
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

Email pelo Xharbour

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

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,

Email pelo Xharbour

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

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,

Email pelo Xharbour

Enviado: 22 Set 2020 13:33
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