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.