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