Email via CDO

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

Moderador: Moderadores

Ladinilson Sousa
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 09 Fev 2015 11:41
Localização: Belém/PA

Email via CDO

Mensagem por Ladinilson Sousa »

Bom dia meus caros!

Estou tentando emviar e mail via CDO e não estou conseguindo e fiz uma comparação com o ACBRmonitorPlus, explico:

No CDO não tem uma configuração que apenas marcada no ACBR funciona o envio que é o TLS sem estar marcado o SSL. Observei isso e fiz um teste com CDO:

Código: Selecionar todos

   aFiles   :={"C:\teste.txt"}
	cSubject :="Sem assunto"  
	aQuem    :="ladinilson@hotmail.com"
	cMsg     :="Corpo da Mensagem"
	cServerIp:="smtp-mail.outlook.com"
	cFrom    :="ladinilson@hotmail.com"
	cUser    :="ladinilson@hotmail.com"
	cPass    :=vsenha
	vPORTSMTP:= 25 // ou 587 
	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)
As configurações e envio:

Código: Selecionar todos

**********************************************************************************************************************
	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
Pesquisei sobre o TLS e descobri que esta configuração NÃO EXISTE no CDO pelo próprio site da Microsoft.

No ACBR...
Imagemfree image uploading

No ACBR usei a porta 587 e também usei a 25 (no caso para hotmail) e funciona no ACBR a 587 e smtp do jeito que esta e funciona!

A mensagem é a de sempre...DISP_E_MENBERNOTFOUND

Pergunto se alguém tem a solução ou se tem a rotina para enviar via ACBR?

Obrigado
Ladinilson Sousa
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 09 Fev 2015 11:41
Localização: Belém/PA

Email via CDO

Mensagem por Ladinilson Sousa »

Obrigado mesmo assim pessoal, consegui pelo ACBr.
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Email via CDO

Mensagem por lucimauro »

Bom dia;

Pelo CDO não envia pela porta 587 com TLS, também tenho esse mesmo problema.
Lembrando que isso você só precisa se for enviar email pelo outlook.com/Hotmail.com que são a mesma coisa.
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 via CDO

Mensagem por pauloa1 »

Não estou conseguindo fecha o objeto.

oMsg:quit() não existe essa propriedade no cdo., como no excel, word etc..

Será que tem como fechar? preciso que ela feche pra liberar o arquivo anexado no email, pra poder deletar.

O arquivo só elçe deletado se sair do sistema.

Paulo
Responder