César, yo uso lo siguiente y funciona bien hasta el momento en todos los SO en 
danza: (ojo que reemplacé algunas llamadas a métodos y condiciones por textos 
indicativos, porque esto está metido en un framework y traté de desacoplarlo.

 

Saludos!

 

Function SendMail(toParam as Object, tlNoInformar as Boolean)

LOCAL loCfg as Object, loMsg as Object, lcFile as String, loErr as Object,;

       lnPort as Integer, lcError as String, lcRetVal as String

lcRetVal = ''

TRY

       loCfg = CREATEOBJECT("CDO.Configuration")

       lnPort = toParam.nPort     && También podría ser 587 para gmail

       WITH loCfg.Fields

              
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver";) = 
toParam.cMailServer

              
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport";) = 
toParam.nPort

              .Item("http://schemas.microsoft.com/cdo/configuration/sendusing";) 
= 2

              If !Empty(toParam.cSenderEmail) and !Empty(toParam.cPassword)

                     
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";) = 
toParam.lSMTPAuthenticate

                     
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl";) = 
toParam.lSSL

                     
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername";) = 
toParam.cSenderEmail

                     
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword";) = 
toParam.cPassword

              EndIf

              .Update

       ENDWITH

       loMsg = CREATEOBJECT ("CDO.Message")

       WITH loMsg

              .Configuration = loCfg

              *-- Remitente y destinatarios

              .From = toParam.cSenderEmail

              

              If (tu condición de entorno de desarrollo o debug)

                     .To = "Tu correo"

                     .Cc = "otros emails si corresponde"

                     .BCc = ""

              Else

                     .To = toParam.cDestino

                     .Cc = toParam.cCCList

                     .BCc = toParam.cBCCList

              EndIf 

 

              .Subject = toParam.cSubject

              

              If [<HTML] $ Upper(toParam.cBody)

                     .HTMLBody = toParam.cBody

              Else

                     .TextBody = toParam.cBody

              Endif

 

              IF NOT EMPTY(toParam.cAdjuntos)

                     If (',' $ toParam.cAdjuntos and ';' $ toParam.cAdjuntos)

                           lcError = 'Delimitador de archivos adjuntos 
incongruente'

                     Else

                           Local lnFiles as Integer, lnCounter as Integer, 
lcDelimiter as String,;

                                  lcAttach as String

                           lcDelimiter = Iif(',' $ toParam.cAdjuntos, ',', ';')

                           lnFiles = GetWordCount(toParam.cAdjuntos, 
lcDelimiter)

                           For lnCounter = 1 to lnFiles

                                  lcAttach = GetWordNum(toParam.cAdjuntos, 
lnCounter, lcDelimiter)

                                  .AddAttachment(lcAttach)

                           EndFor

                     EndIf

              ENDIF

 

              *-- Envio el mensaje

              If Empty(lcError)

                     .Send()

                     If (Es una dll)

                           lcRetVal = 'Correo enviado'

                     Else

                           If !tlNoInformar

                                  MessageBox('Correo enviado')

                           Endif

                     Endif

              Else

                     If (Es una dll)

                           lcRetVal = lcError

                     Else

                           MessageBox(lcError)

                           lcRetVal = lcError

                     Endif

              EndIf

       ENDWITH

CATCH TO loErr

       lcRetVal = TuRutinaDeErrores()

FINALLY

       loMsg = NULL

       loCfg = NULL

EndTry

Return lcRetVal

EndFunc

 

 

Donde toParam es un objeto así, al que le completarás los datos de acuerdo a tu 
entorno:

 

Define Class MailParameter as Session

cMailServer = ''

cSenderEmail = ''

cAdjuntos = ''

cDestino = ''

cCCList = ''

cBCCList = ''

cUserName = ''

cPassWord = ''

cSubject = ''

cBody = ''

nPort = 0

lSMTPAuthenticate = .F.

lSSL = .F.

cError = ''

lEditar = .F.

lShowAddress = .F.

lEnviar = .F.

EndDefine

 

De: [email protected] [mailto:[email protected]] En nombre de Cesar Luque
Enviado el: martes, 26 de abril de 2016 07:51
Para: GUFA List Member
Asunto: [GUFA] Envio de correos desde VFP - CDO

 

Estimados

 

Venia usando una rutina para enviar mails que había encontrado hace tiempo 
escrita por

José María Guayan usando este objeto( MAILCDO )

 

Con xp andaba bien, pero al actualizar el SO a W7 deja de funcionar y arroja 
siempre el mensaje

 

Servidor no disponible (Server not available )

 

Lo cual no es real ya que usando algún cliente de correo, salen perfectamente.

 

Cual puede ser el problema?

Que usan para automatizar el envío de correo desde aplicativos Visual fox en 
maquinas

Con win 7/10? Han tenido también estos problemas?

 

Saludos

César Luque.

 

Responder a