Saludos amigos,
Comentarles que tire la toalla con hb_SendMail(), hice 50 pruebas con todas las indicaciones dadas en las diversas publicaciones de danielmaximiliano (por cierto gracias por tu respuesta) y nada.
El tiempo de entrega me gana así que no me quedo de otra que crearme una aplicación de consola en C#, la nombre SendMail.exe y acomodé mi .prg así:
Code: Select all
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC MailCPE(cCorreo,nOperId,cDocumento)
LOCAL cSubject := SIS_COMER + " - COMPROBANTE DE PAGO "+cDocumento
LOCAL aEnlaces := {}
LOCAL cRespuesta := "ERROR: No se pudo enviar el correo a "+cCorreo
LOCAL cParametros:= ""
LOCAL nTrys := 0
LOCAL cBody := ""
LOCAL hJson := { => }
NubeFact_CPECons( "V" , nOperId , "generada" ) //<- consulto al PSE el estado del comprobante
aEnlaces := GetEnlaces( cDocumento ) //<- extraigo los enlaces que proporciona el PSE para los documentos generados
IF LEN(aEnlaces) > 0
DELETE FILE ("sendmail.txt")
hJson["SmtpServer"] := "mail.corporacionemanuelfarma.com"
hJson["SmtpPort"] := 587 //con el puerto 465 no funciona
hJson["EmailFrom"] := "facturacion@corporacionemanuelfarma.com"
hJson["EmailTo"] := ALLTRIM(cCorreo)
hJson["Subject"] := cSubject
hJson["Username"] := "facturacion@corporacionemanuelfarma.com"
hJson["Password"] := "xxxxxxxxxx"
hJson["Attachments"] := {}
strfile( hb_jsonEncode( hJson , .t. ) , "sendmail.json" )
cBody := ;
"<html><body>"+;
"<h1>Se emitió el comprobante de pago electrónico "+cDocumento+"</h1>"+;
"<br />"+;
"Puede descargarlo de los siguientes enlaces:<br />"+;
"<br />"+;
aEnlaces[1]+"<br /><br />"+;
aEnlaces[2]+"<br />"+;
REPL("<br />",8)+;
SIS_COMER+"<br />"+;
SIS_RUC+"<br />"+;
"</body></html>"
strfile( cBody , "sendbody.txt" )
IF FILE("sendmail.json") .AND. FILE("sendbody.txt")
cParametros:= " sendmail.json sendbody.txt"
ShellExecute( 0 , "open" , "SendMail.exe" , cParametros )
DO WHILE .NOT. FILE("sendmail.txt")
nTrys++
IF nTrys > 5000000
EXIT
ENDIF
ENDDO
IF FILE("sendmail.txt")
cRespuesta := hb_memoread("sendmail.txt")
ENDIF
ENDIF
DELETE FILE ("sendmail.json")
DELETE FILE ("sendbody.txt")
ELSE
cRespuesta := "Este documento no ha sido aceptado por Nubefact."
ENDIF
RETURN(cRespuesta)
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
FUNC GetEnlaces( cDocNum )
LOCAL aLinks := {}
LOCAL aData := {}
LOCAL cResp := ""
LOCAL cRespFile := SYS_PSECNS + cDocNum + '_R' + '.json'
IF FILE( cRespFile )
cResp := hb_memoread( cRespFile )
IF "enlace" $ cResp
hb_jsondecode( cResp , @aData )
aLinks := { aData["enlace"] , aData["enlace_del_pdf"] }
ENDIF
ENDIF
RETURN( aLinks )
SendMail.exe recibe dos parametros:
1. el nombre del archivo .json que contiene todos los campos con la configuración para el correo.
2. el nombre del archivo .txt que contiene el cuerpo del correo en formato html.
Cuando ha terminado, SendMail.exe me genera un archivo sendmail.txt con el resultado del envío. (Si se envío o no el correo).
Sin embargo debo acotar lo siguiente, incluso cuando uso con esta aplicación el puerto 465 NO ENVÍA. Es rarísimo. Solo me funciona cuando uso el puerto 587, que es el puerto que mi proveedor de hosting me indica es SIN SEGURIDAD.
- correo_sendmail.png (110.83 KiB) Viewed 1678 times
Al parecer se trata de como esta configurado el correo en el servidor del hosting, ya he revisado el cpanel y no he encontrado nada al respecto como para poder cambiarlo.
Debo mencionar también que hb_SendMail() me funciona sin ningún problema con otro host que tengo y que usa el puerto 25, sin embargo con este host, así use el puerto 587 no funciona. Así que de momento me quedaré con esta solución ya que me permite enviar los mensajes en formato html, cosa que no puedo hacer con hb_SendMail().
Espero les sirva a los que han tenido el mismo problema. Saludos y gracias.