Hola FiveWinners.
Este codigo genera una mail con imagenes y funciona bien.
espero les sirva
Saludos
// envio de mail
#Include "FiveWin.ch"
Function Enviar_Main(_TO, _CC, _BCC, _PDF, _XML, _TEXTO, _SUBJECT, _MSG, _cliente, _folio)
LOCAL RET:=.T.
PRIVATE oEmailCfg,oEmailMsg
PRIVATE cServerEmail:="smtp.midominio.com" // cuidado... este es el dominio de donde sale el mail
PRIVATE cEnvia:="enviomail@midominio.com" // cuidado... este es el mail
PRIVATE cPEnvia:="mipass" // cuidado... esta es la password
PRIVATE nPrePuerto:=587 // cuidado... el numero de puerto puede variar
DEFAULT _CC:="", _BCC:="", _PDF:="", _XML:="", _TEXTO:="Anexo email", _SUBJECT:="Envio mail......", _MSG:=.T.
PRIVATE cServidor:=Params->MailServer+SPACE(80),nPuerto:=125 // OJO CON ESTE NUMERO DE PUERTO DE ENVIO, PUEDE VARIAR
PRIVATE cUsuario:=Params->MailUser+SPACE(80)
PRIVATE cUsuario:=SPACE(80) , cPassword:=SPACE(80)
IF CFDI:FL_AutoEmail = .T.
_MSG := .F.
ENDIF
IF EMPTY(cUsuario)
MSGSTOP("CDO002 El Usuario que envia el e-Mail es Incorrecto" + CRLF + "Debe Proporcionarlo","Error...")
IF CONFIGURAR_eMain() = .T.
USE ("Params") ALIAS PA SHARED NEW
cUsuario:=PA->MailUser+SPACE(80)
PA->(DBCLOSEAREA())
ENDIF
IF EMPTY(cUsuario)
MSGSTOP("CDO003 Imposible enviar el Correo, la clave del usuario es Inválida","Error...")
RETURN .F.
ENDIF
ENDIF
IF EMPTY(nPuerto)
nPuerto:=nPrePuerto
ENDIF
IF EMPTY(_TO)
RETURN .F.
ENDIF
nPOS:=AT(";", _TO) // permite enviar con copia
_TO_ORI:=_TO
IF nPOS > 0
_TO:=SUBSTR(_TO_ORI, 1, nPOS-1)
_CC:=SUBSTR(_TO_ORI, nPOS+1 )
ENDIF
IF EMPTY(_BCC)
_BCC:= ALLTRIM(cUsuario)
ENDIF
TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := ALLTRIM(cServerEmail)
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := nPuerto
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2 // Remote SMTP = 2, local = 1
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .F.
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := ALLTRIM(cEnvia)
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := ALLTRIM(cPEnvia)
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 60
:Update()
END WITH
CATCH oError
MsgInfo( "Could not create message configuration" + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
Return .F.
END
oError:=NIL
TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = chr(34)+" http://www.PremiumPyME.com "+chr(34)+ ALLTRIM(cUsuario) // This will be displayed in the From (The email id does not appear)
:To = ALLTRIM(_TO) // <----- Place the TO email address
:Subject = _SUBJECT
:ReplyTo = ALLTRIM(cUsuario)
:Sender = ALLTRIM(cUsuario) // Read Receipt message is send to this
:Organization = "mi empresa sa de cv" // "My Company Name"
:HTMLBody = Z_CDO_HTML(_cliente, _folio)
IF ! EMPTY(_PDF) .AND. FILE(_PDF)
:AddAttachment = _PDF
ENDIF
IF ! EMPTY(_XML) .AND. FILE(_XML)
:AddAttachment = _XML
ENDIF
IF ! EMPTY(_CC)
:cc = _CC
ENDIF
IF ! EMPTY(_BCC)
:Bcc = _Bcc
ENDIF
:Send()
END WITH
SysRefresh()
CATCH oError
MsgInfo( "SEND01 NO PUDE enviar el mail a : " + ";" + 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 )
Return .F.
END
IF _MSG = .T.
MsgInfo("Email enviado")
ENDIF
Return RET
FUNCTION CONFIGURAR_eMain()
LOCAL RET:=.F.
PRIVATE oDlf, oGet:=ARRAY(5)
PRIVATE cServerEmail:="smtp.midominio.com"
PRIVATE cEnvia:="enviomail@midominio.com"
PRIVATE cPEnvia:="Externa_2013"
PRIVATE nPrePuerto:=587
PRIVATE cServidor:=Params->MailServer+SPACE(80),nPuerto:=Params->MailPuerto, cUsuario:=Params->MailUser+SPACE(80), cUsuario:=SPACE(80) , cPassword:=Params->MailPass+SPACE(80)
IF EMPTY(cServidor)
cServidor:=cServerEmail
ENDIF
IF EMPTY(nPuerto)
nPuerto:=nPrePuerto
ENDIF
DEFINE DIALOG oDlf RESOURCE "EMAIL_CONF" OF oWnd
REDEFINE GET oGet[1] VAR cServidor ID 101 OF oDlf READONLY
REDEFINE GET oGet[2] VAR nPuerto ID 102 OF oDlf PICTURE "9999"
REDEFINE GET oGet[3] VAR cUsuario ID 103 OF oDlf
REDEFINE GET oGet[4] VAR cPassword ID 104 OF oDlf
REDEFINE BUTTON oGet[5] ID 110 OF oDlf ACTION IIF(RET:=PRUEBA_MAIL() = .T., (GUARDA_DATOSMAIL(), oDlf:END()), ;
MSGINFO("Los datos del Mail NO son Correctos","Cuidado") ) CANCEL
ACTIVATE DIALOG oDlf CENTERED
RETURN RET
FUNCTION PRUEBA_MAIL()
LOCAL RET:=.T.
IF EMPTY(cUsuario)
RETURN .F.
ENDIF
TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := ALLTRIM(cServerEmail)
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := nPuerto
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2 // Remote SMTP = 2, local = 1
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .F.
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := ALLTRIM(cEnvia)
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := ALLTRIM(cPEnvia)
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 60
:Update()
END WITH
CATCH oError
MsgInfo( "Could not create message configuration" + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
Return .F.
END
oError:=NIL
TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = chr(34)+" MI SISTEMA "+chr(34)+ ALLTRIM(cUsuario)
:To = ALLTRIM(cUsuario) // <----- Place the TO email address
:Subject = "Mensaje de Prueba enviado por MI SISTEMA "
:ReplyTo = ALLTRIM(cUsuario)
:Sender = ALLTRIM(cUsuario) // Read Receipt message is send to this
:Organization = " MI COMPAÑIA SA de CV" // "My Company Name"
:HTMLBody = "<HTML> Te anexo el documento de prueba </HTML>"
:TextBody = "Mensaje de Prueba enviado por mi empresa"
:Send()
END WITH
SysRefresh()
CATCH oError
MsgInfo( "SEND02 NO PUDE enviar el mail a : " + ALLTRIM(cUsuario) + ";" + 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 )
IF oError:GenCode = 1001 .AND. oError:SubCode = 3
MSGINFO("El Puerto de Salida NO es correcto","Error...")
ENDIF
Return .F.
END
MsgInfo("Mensaje de Prueba enviado a: " + ALLTRIM(cUsuario),"Informando...")
RETURN RET
FUNCTION GUARDA_DATOSMAIL()
LOCAL RET:=.T.
SELECT("Params")
TRY
Params->(RLOCK())
Params->MailServer := ALLTRIM(cServidor)
Params->MailPuerto := nPuerto
Params->MailUser := ALLTRIM(cUsuario)
Params->MailPass := ALLTRIM(cPassword)
Params->(DBUNLOCK())
SR_CommitTransaction()
SR_EndTransaction()
CATCH oERR
SR_RollBackTransaction()
MSGINFO("CDO001 NO pude Registrar los datos del Mail ","Error...")
MSGALERT(PR_ErrorMessage( oErr ),"Alerta...")
END TRY
RETURN RET
FUNCTION Z_CDO_HTML(_empresa, _folio)
LOCAL cHTML:=""
cHTML+='<!--'
cHTML+=' Document : Index HTML'
cHTML+=' Created on : 11/03/2013, 12:35:37 PM'
cHTML+=' Author : Gloria Annaís Martínez-Flores'
cHTML+=' Description: Index desde donde se ejecuta la pagina'
cHTML+='-->'
cHTML+=''
cHTML+='<html>'
cHTML+=' <head>'
cHTML+=' <title>PremiumPyME, Facturación Electrónica</title>'
cHTML+=' </head>'
cHTML+=' '
cHTML+=' <body oncontextmenu="return false" onkeydown="return false">'
cHTML+=' <table cellspacing="0" cellpadding="0" bgcolor="#B7C3C9">'
cHTML+=' <tr>'
cHTML+=' <td>'
cHTML+=' <img src="http://www.univirtual.edu.mx/img_envio/imgheader2t.png" width="728" height="90" alt="PremiumPyME" border="0">'
cHTML+=' <blockquote>'
cHTML+=' <p align="left">'
cHTML+=' <font size="3" color="#003366" face="verdana">'
cHTML+=' <strong>Para : #empresa#</strong>'
cHTML+=' </font>'
cHTML+=' </p> '
cHTML+=' </blockquote>'
cHTML+=' </td>'
cHTML+=' </tr>'
cHTML+=' '
cHTML+=' <tr>'
cHTML+=' <td align="left" width="708">'
cHTML+=' <table cellspacing="0" cellpadding="30" bgcolor="#B7C3C9">'
cHTML+=' <tr>'
cHTML+=' <td rowspan="2">'
cHTML+=' <p align="justify">'
cHTML+=' <font size="3" color="#003366" face="verdana">'
cHTML+=' Estimado cliente,'
cHTML+=' <br><br>Por este conducto le enviamos su comprobante fiscal digital <strong>#numero#</strong>, agradecemos su pago.'
cHTML+=' </font>'
cHTML+=' </p>'
cHTML+=' </td>'
cHTML+=' </tr>'
cHTML+=' '
cHTML+=' <tr> '
cHTML+=' <td valign="left" width="250">'
cHTML+=' <img src="http://www.univirtual.edu.mx/img_envio/premiumfact2.png" width="230" height="140" alt="PremiumPyME" border="none">'
cHTML+=' </td>'
cHTML+=' </tr>'
cHTML+=' </table> '
cHTML+=' </tr>'
cHTML+=''
cHTML+=' <tr>'
cHTML+=' <td>'
cHTML+=' <center>'
cHTML+=' <font size="3" color="#003366" face="verdana">'
cHTML+=' <br><strong>PremiumPyME</strong>'
cHTML+=' <br><strong>Facturación Electrónica</strong>'
cHTML+=' <br>Telefono (55) 593 84917'
cHTML+=' <br><a href="http://www.premiumpyme.com">www.premiumpyme.com</a>'
cHTML+=' </font>'
cHTML+=' </center>'
cHTML+=' <img src="http://www.univirtual.edu.mx/img_envio/imgfooter2.png" width="728" height="90" alt="PremiumPyME" border="0">'
cHTML+=' </td>'
cHTML+=' </tr>'
cHTML+=' </table>'
cHTML+=' </body>'
cHTML+='</html>'
cHTML := STRTRAN(cHTML,"#empresa#",_empresa)
cHTML := STRTRAN(cHTML,"#numero#",_folio)
RETURN cHTML