Bueno, después de todo era una tontería.
Los códigos que hay en el foro sinceramente no sé si funcionan (no tengo ganas de mirar más).
Este a mi me funciona (sin probar lNotification ni lSSL):
FUNCTION MAILSend_CDO10( cFrom, cServer, cTo, cSubject, cMessage, aAttach, cSender, cUser, cPassword, aCc, aBCc, lHtml, cPort, lNotification, lSSL )
LOCAL lOk := .T.
LOCAL oCfg, oMsg
LOCAL cCc := ""
Local cBCc := ""
LOCAL i
Local oError
DEFAULT lHtml := "<html" $ LOWER( cMessage )
DEFAULT lNotification := .F.
DEFAULT lSSL := .F.
TRY
oCfg := CREATEOBJECT( "CDO.Configuration" )
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := cServer
IF !EMPTY( cPort )
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := VAL( cPort )
ENDIF
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := 0
IF !EMPTY( cUser ) .AND. !EMPTY( cPassword )
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := 1
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := cUser
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := cPassword
oCfg:Fields:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := 0 // lSSL
ENDIF
oCfg:Fields:Update()
CATCH oError
MsgInfo( "Could not send message" + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description, "Error en la configuración de envío." )
lOk = .F.
END
oError:=NIL
TRY
oMsg := CREATEOBJECT( "CDO.Message" )
oMsg:Configuration := oCfg
IF !EMPTY( cSender )
cFrom := ["] + cSender + ["] + " <" + cFrom + ">"
ENDIF
oMsg:From := cFrom
oMsg:To := cTo
oMsg:Subject := cSubject
IF !EMPTY( aCc )
FOR i := 1 TO LEN( aCc )
IF i > 1
cCc += ";"
ENDIF
cCc += aCc[ i ]
NEXT
oMsg:CC := cCc
ENDIF
IF !EMPTY( aBCc )
FOR i := 1 TO LEN( aBCc )
IF i > 1
cBCc += ";"
ENDIF
cBCc += aBCc[ i ]
NEXT
oMsg:BCC := cBCc
ENDIF
IF !lHtml
oMsg:TextBody := cMessage
ELSE
oMsg:HTMLBody := cMessage
ENDIF
IF !EMPTY( aAttach )
FOR i := 1 TO LEN( aAttach )
oMsg:AddAttachment( aAttach[ i ] )
NEXT
ENDIF
IF lNotification
oMsg:Fields:Item( "urn:mailheader:disposition-notification-to" ):Value = cFrom
oMsg:Fields:Update()
ENDIF
oMsg:Send()
CATCH oError
MsgInfo("Could not send message" + ";" + CRLF+ ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + CRLF+;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + CRLF+ ;
"OSCode: "+ TRANSFORM(oError:OsCode, NIL) + ";" + CRLF +;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" +CRLF+ ;
"Message: " + oError:Description, "Error al configurar el mensage." )
lOk = .F.
END
RETURN lOk
Que nadie más tenga de perder tanto tiempo como yo.
Un abrazo y Feliz 2018!!!