Enviar correo con cuenta SSL/TLS

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Enviar correo con cuenta SSL/TLS

Post by edufloriv »

Saludos amigos,

Estoy tratando de enviar correos desde una cuenta corporativa de un cliente. El cpanel me envío la siguiente configuración para setear:
settings.png
settings.png (45.04 KiB) Viewed 1616 times
Realicé la configuración primero en Thunderbird para probar que funciona y esta ok, envia bien el correo. Sin embargo cuando trato de usar hb_sendmail:

Code: Select all

      lRespuesta := ;
      hb_SendMail( ;
      "mail.corporacionemanuelfarma.com",;             // SMTP Servidor
      465,;             // Puerto
      "facturacion@corporacionemanuelfarma.com",;                // From
      {"edufloriv@gmail.com"},;                      // To
      NIL ,;                     /* CC */
      NIL ,;                     /* BCC */
      "Prueba de envio" ,;                   // Body
      "PRUEBA TLS" ,;                // Subject
      NIL ,;                     // aFiles attached
      "facturacion@corporacionemanuelfarma.com" ,;               // User   (obligatorio)
      "elpassword",;                // Pass (obligatorio)
      "mail.corporacionemanuelfarma.com",;             // POP Server (obligatorio)
      3 ,;                       /* nPriority */
      .F. ,;                     /* lRead */
      .F. ,;                     /* lTrace */
      .T. ,;                     /* lPopAuth */
      .F. ,;                     /* lNoAuth */
      NIL ,;                     /* nTimeOut */
      NIL ,;                     /* cReplyTo */
      .T. ,;                     /* lTLS */
      "elpassword" )
Lamentablemente no logra enviar el correo. Trate también con una ejemplo que envió danielmaximiliano:

http://www.hmgforum.com/viewtopic.php?t ... 3&start=10
gmail_sender.png
gmail_sender.png (58.89 KiB) Viewed 1616 times
Pero me devuelve el siguiente error
error_send.png
error_send.png (36.56 KiB) Viewed 1616 times
Agradeceré si alguien me lanza un cable. De momento solo necesito enviar correos con los comprobantes que genera mi cliente.

Saludos cordiales.

Eduardo Flores Rivas


LIMA - PERU
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Enviar correo con cuenta SSL/TLS

Post by danielmaximiliano »

Hola Edu: este tema fue ya tratado por mi hace muchísimo.
Primero tener instalado Openssl (tambié fue tratado)
Crear la librería.
Agregar librería al proyecto.
Compilar el proyecto..
http://hmgforum.com/viewtopic.php?p=225 ... cc3#p22553
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: Enviar correo con cuenta SSL/TLS

Post by edufloriv »

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&oacute; el comprobante de pago electr&oacute;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
correo_sendmail.png (110.83 KiB) Viewed 1521 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.

Eduardo Flores Rivas


LIMA - PERU
User avatar
serge_girard
Posts: 3167
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

Re: Enviar correo con cuenta SSL/TLS

Post by serge_girard »

Eduardo,

I used Harbours hb_SendMail() but always troubles. Now I send emails via Thunderbird bat (one at the time):
After clicking you have option to send or ignore email. And it is saved in 'send items'. Thunderbird will do all the work!

Code: Select all

cTO = 'emailaddress@emailaddress.xxx'

@ 350,10 BUTTON Bt_SEND2;
	Caption 'Thunderbird';
	PICTURE 'MAIL' ;
	FONT 'Arial' SIZE 9		;
	HEIGHT 86 ;	 
	WIDTH  72 ;
	ACTION Thunderbird('BO', '', cLOCAL_FILE, '', '', cTO ) 




FUNCTION Thunderbird(cSOORT, cFAK_NR, cPDF_File, cFA_DATUM, cFA_TEBETDT, cTO)
/*****************************************************************************/
LOCAL cBAT, aFILES, cFILEX, A, cTABLE 
LOCAL cHTML, cTXT  

PUBLIC cZAKENKANTOOR  := 'zakenb@host.be'

aFILES := {}
AADD(aFILES , 'c:\Progra~1\Mozill~1\thunderbird.exe' )
AADD(aFILES , 'c:\Progra~1\Mozill~2\thunderbird.exe' )
AADD(aFILES , 'c:\Progra~2\Mozill~1\thunderbird.exe' )
AADD(aFILES , 'c:\Progra~2\Mozill~2\thunderbird.exe' )
cFILEX := ''
FOR A := 1 TO LEN(aFILES)
   IF FILE(aFILES [A])
      cFILEX := aFILES [A]
      cFILEX := STRTRAN(cFILEX, '.exe' , '')   
      EXIT
   ENDIF
NEXT

 
cHTML   := 'c:\zakenb\bo.html'
SET PRINTER TO &cHTML
SET PRINTER ON 
SET CONSOLE OFF
 
?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
?'<html>'
?'<head>'
?'<title>Some title</title>'
?'<meta name="Generator" content="zakenb">'
?'<meta name="Author" content="">'
?'<meta name="Keywords" content="">'
?'<meta name="Description" content="">'
?'</head>'
?'<body>'
?'Some messages<br>'
?'<br>'
?'Reagrds,<br><br>'
?'zakenb B.V.<br>'
?'Street 11 <br>'
?'1234 City<br><br>'
?'www.mysite.com     <br>'
?'Tel: 012- 34 56 78           <br>'
?'Fax: 012- 34 56 79           <br>'
?'<br><br>'
?'<b>zakenb@host.be</b><br>'
?'</body>'
?'</html>'
SET PRINTER OFF
SET PRINTER TO
SET CONSOLE ON



cBAT    := 'c:\zakenb\bo.bat'


cTXT     := cFILEX + " -compose " + '"' + "to='" + cTO + "',subject='Subject title ',format='html',body='bla',message='" + cHTML + "',attachment='" + cPDF_File + "'" + '"'
//        between item use a COMMA before and after and NO SPACES!
 

SET PRINTER TO &cBAT
SET PRINTER ON 
SET CONSOLE OFF
? cTXT
SET PRINTER OFF
SET PRINTER TO
SET CONSOLE ON
EXECUTE FILE cBAT 
RETURN
Hope this can help!
There's nothing you can do that can't be done...
edk
Posts: 914
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: Enviar correo con cuenta SSL/TLS

Post by edk »

Hi Eduardo. Try to replace ssl dlls with this attached in this post: https://www.hmgforum.com/viewtopic.php? ... e67#p66777
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Enviar correo con cuenta SSL/TLS

Post by danielmaximiliano »

Hola a todos:
estos dias busque en mis viejos SSD backups el .bat para compilar de nuevo la libreria hbssl y como no lo encontre volvi a hacer de nuevo ese batch.

Code: Select all

@echo off
SET backup=%path%
set HB_WITH_OPENSSL=C:\OpenSSL-Win64\include
SET HMGPATH=c:\hmg.3.5
SET PATH=%HMGPATH%\harbour\bin;%HMGPATH%\mingw\bin;%PATH%

hbmk2 hbssl.hbp -i%hmgpath%\include
set path=%backup%
set backup=
pause
primero antes de todo descargar OpenSsl 64 bits (version completa desde) https://slproweb.com/download/Win64OpenSSL-3_2_1.exe
instalar en
"C:\OpenSSL-Win64"
y los binarios tambien en dicha carpeta.

Nota: los archivos SSLeay32.dll y Libeay32.dll no vienen incluidos en la distribución asi que hay que copiarlos manualmente a
C:\OpenSSL-Win64
y se encuentrar aqui -->
OpenSSL-Win64.rar
(666.67 KiB) Downloaded 465 times
la libreria contrib Hbssl se encuentra aqui si no la quieren descargar
hbssl.rar
(69.34 KiB) Downloaded 489 times
ya que se necesita descargar el Harbour Core desde https://github.com/harbour/core/archive ... master.zip
una vez ejecutado el batch (Build64.bat) se crean las librerias para usar con hbtip (hbsendmail). estas libs.a se deben copiar a
C:\HMG.3.5\LIB-64

Si se genera error al intentar compilar con dichas librerias hay que modificar
"C:\HMG.3.5\hmg64.hbc"
y agregarlas manualmente a partir de la linea 52

cualquier cosa estoy a sus ordenes
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
franco
Posts: 821
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Enviar correo con cuenta SSL/TLS

Post by franco »

I am still using Gmail. Works flawlessly every time. This is the original send mail from years ago. Originally had to turn security down which no one
liked doing, but it worked. Now Google has 2 step verification and it works well. You have 2 pass words, one for the account and one that google
sends you when setting up an App Password within the Gmail account. The app is registered with Google and it works.
When setting up the app you add in new app entry field c:\myfolder\myprogram.exe and they send a odd looking password that you use in the
program. Example: YWEGHYUHERGAG. I just copy and paste it into my sending password field.
All The Best,
Franco
Canada
Post Reply