Hola Colegas.
Más abajo les copio el código fuente de 3 métodos distintos para el envío de correos desde Harbour/ooHg.
El primero de ellos se basa en HB_SENDMAIL() de Harbour.
El segundo es mediante la clase TSMTP.
El último es mediante el objeto CDO de Windows.
Los tres métodos están probados y funcionan bien.
En algunos de ellos hay valores predeterminados para el envío a cuentas de Google, Yahoo, etc.
Si el formato del código aparece desordenado me avisan y lo vuelvo a enviar como archivos adjuntos.
Saludos...
Ricardo Sassy
************************* ENVIO DE MAIL USANDO HB_SENDMAIL() ****************************************
FUNCTION sha_sendmail(lConfAut,cFrom,cPassword,aTo,cSubject,cBody,aAttach,cSmtp,nPort,lSecureServ,aCc,aBcc,lConfLect,lLog,lAutPop3,cPop3,cUser,nPriority,lNoAuth,nTimeOut,cReplyTo,cSmtpPass)
LOCAL lOk := .F.
DEFAULT lConfAut TO .T.
DEFAULT nPort TO 25
DEFAULT cSmtp TO ''
DEFAULT lSecureServ TO .F.
DEFAULT aCc TO {}
DEFAULT aBCc TO {}
DEFAULT aAttach TO {}
DEFAULT lConfLect TO .F.
DEFAULT lLog TO .F.
DEFAULT lAutPop3 TO .F.
DEFAULT cBody TO ''
DEFAULT cSubject TO ''
DEFAULT cPop3 TO ''
DEFAULT nPriority TO 3
DEFAULT lNoAuth TO .F.
DEFAULT nTimeOut TO 10000
DEFAULT cReplyTo TO ''
IF cUser==NIL
cUser := cFrom
ENDIF
IF cSmtpPass==NIL
cSmtpPass := cPassword
ENDIF
DO CASE
CASE "@GMAIL."$UPPER(cFrom) .AND. lConfAut
nPort := 465
cSmtp := "smtp.gmail.com"
lSecureServ := .T.
CASE "@YAHOO."$UPPER(cFrom) .AND. lConfAut
nPort := 465
cSmtp := "smtp.mail.yahoo.com"
lSecureServ := .T.
CASE "@LIVE."$UPPER(cFrom) .AND. lConfAut
nPort := 587
cSmtp := "smtp.live.com"
lSecureServ := .T.
CASE "@HOTMAIL."$UPPER(cFrom) .AND. lConfAut
nPort := 587
cSmtp := "smtp.hotmail.com"
lSecureServ := .T.
CASE "@OUTLOOK."$UPPER(cFrom) .AND. lConfAut
nPort := 587
cSmtp := "smtp-mail.outlook.com"
lSecureServ := .T.
ENDCASE
lOk := HB_SENDMAIL(cSmtp ,; // SERVIDOR SMTP 1
nPort ,; // PUERTO (ASUME 25) 2
cFrom ,; // REMITENTE 3
aTo ,; // DESTINATARIO (CARACTER O ARRAY) 4
aCc ,; // CC (CARACTER O ARRAY) 5
aBcc ,; // BCC /CARACTER O ARRAY) 6
cBody ,; // BODY (TEXTO O NOMBRE ARCHIVO) 7
cSubJect ,; // SUBJECT 8
aAttach ,; // ARCHIVO ADJUNTO (CARACTER O ARRAY) 9
cUser ,; // USUARIO POP3 10
cPassword ,; // PASSWORD POP3 11
cPop3 ,; // SERVIDOR POP3 12
nPriority ,; // PRIORIDAD 13
lConfLect ,; // CONFIRMACION LECTURA 14
lLog ,; // CREA LOG FILE 15
lAutPop3 ,; // AUTENTICACION POP3 16
lNoAuth ,; // DISABLE AUTENTICACION 17
nTimeOut ,; // TIMEOUT EN MILISEGUNDOS (ASUME 1000) 18
cReplyTo ,; // RESPUESTA A 19
lSecureServ ,; // SERVIDOR SEGURO 20
cSmtpPass ,; // PASSWORD SMTP (ASUME LA POP3) 21
NIL ,; // CHARSET (ASUME ISO-8859-1) 22
NIL) // ENCODING (ASUME quoted printable) 23
RETURN(lOk)
************************* ENVIO DE MAIL USANDO TSMTP ****************************************
FUNCTION sha_sendmail2(lConfAut,cRemite,cPassword,aDestinat,cSubject,cTexto,aAdjunto,cServerSmtp,nPuerto,lSecureServ,aCc,aBcc,lConfLect,lLog,lAutPop3,cPop3,cUser,nPriority,lNoAuth,nTimeOut,cReplyTo,cSmtpPass,lAvisaOk,cNombreLog)
LOCAL I := 0
LOCAL lOk := .F.
DEFAULT lAvisaOk TO .T.
DEFAULT cNombreLog TO 'sha_sendmail2.log'
DEFAULT aCc TO {}
DEFAULT aBCc TO {}
DEFAULT aAdjunto TO {}
cFechaHora := DTOS(DATE())+' '+TIME()+' '
oMail:=TSMTP():New()
HB_IDLESLEEP(.5)
//WRITEFILE(cNombreLog,cFechaHora+'CONECTANDO CON '+cServerSmtp)
IF oMail:CONNECT(cServerSmtp,nPuerto)
//WRITEFILE(cNombreLog,cFechaHora+'LOGUEADO COMO '+cRemite)
IF oMail:LOGIN(cRemite,cPassword)
oMail:CLEARDATA()
oMail:SETFROM(cRemite,'<'+cRemite+'>')
oMail:SETSUBJECT(cSubject)
FOR I:=1 TO LEN(aDestinat)
oMail:ADDTO(aDestinat[I],'<'+aDestinat[I]+'>')
NEXT
FOR I:=1 TO LEN(aCc)
oMail:ADDCC(aCc[I],'<'+aCc[I]+'>')
NEXT
FOR I:=1 TO LEN(aBcc)
oMail:ADDBCC(aBcc[I],'<'+aBcc[I]+'>')
NEXT
oMail:SETDATA(cTexto,.F.) // el segundo parametro es para indicar si es HTML
FOR I=1 TO LEN(aAdjunto)
//WRITEFILE(cNombreLog,cFechaHora+'ADJUNTANDO ARCHIVO '+aAdjunto[I])
oMail:ADDATTACH(aAdjunto[I])
NEXT
IF !oMail:SEND(.T.)
//WRITEFILE(cNombreLog,cFechaHora+'ERROR ENVIO MAIL... '+oMail:GetLastError())
ELSE
lOk := .T.
IF lAvisaOk
MSGBOX('MAIL ENVIADO EXITOSAMENTE...')
ENDIF
WRITEFILE(cNombreLog,cFechaHora+'MAIL ENVIADO OK: '+ALLTRIM(aDestinat[1])+' '+cSubject)
ENDIF
IF !oMail:CLOSE()
//WRITEFILE(cNombreLog,cFechaHora+'ERROR AL CERRAR LA CONEXION...')
ENDIF
ELSE
WRITEFILE(cNombreLog,cFechaHora+oMail:GetLastError()+' SMTP:'+cServerSmtp;
+' PUERTO:'+STR(nPuerto,5);
+' USUARIO:'+cRemite;
+' CONTRASEÑA:'+cPassword)
ENDIF
ELSE
WRITEFILE(cNombreLog,cFechaHora+'FALLO EN CONEXION CON SERVER DE CORREO... '+oMail:GetLastError()+' SMTP:'+cServerSmtp;
+' PUERTO:'+STR(nPuerto,5);
+' USUARIO:'+cRemite;
+' CONTRASEÑA:'+cPassword)
ENDIF
oMail := ''
RETURN(lOk)
************************* ENVIO DE MAIL USANDO CDO ****************************************
FUNCTION sha_sendmailcdo(lConfAut,cFrom,cPass,aDestinat,cSubject,cBody,aAdjunto,cServer,nPort,lSecureServ,aCc,aBcc,lConfLect,lLog,lAutPop3,cPop3,cUser,nPriority,lNoAuth,nTimeOut,cReplyTo,cSmtpPass,lAvisaOk,cNombreLog)
LOCAL xTo := ''
LOCAL xCc := ''
LOCAL xBcc := ''
LOCAL cUserM := cFrom
LOCAL lRetorno := .T.
LOCAL I := 0
LOCAL oConfig
LOCAL oMail
LOCAL oErr
DEFAULT aAdjunto TO {}
DEFAULT aCc TO {}
DEFAULT aBcc TO {}
DEFAULT cSubject TO ''
DEFAULT nTimeOut TO 3
DEFAULT lAvisaOk TO .F.
DEFAULT nPriority TO 1
IF cUser==NIL
cUser := cFrom
ENDIF
IF cSmtpPass==NIL
cSmtpPass := cPassword
ENDIF
DO CASE
CASE "@GMAIL."$UPPER(cFrom) .AND. lConfAut
nPort := 465
cSmtp := "smtp.gmail.com"
lSecureServ := .T.
CASE "@YAHOO."$UPPER(cFrom) .AND. lConfAut
nPort := 465
cSmtp := "smtp.mail.yahoo.com"
lSecureServ := .T.
CASE "@LIVE."$UPPER(cFrom) .AND. lConfAut
nPort := 587
cSmtp := "smtp.live.com"
lSecureServ := .T.
CASE "@HOTMAIL."$UPPER(cFrom) .AND. lConfAut
nPort := 465
cSmtp := "smtp.live.com"
lSecureServ := .T.
CASE "@OUTLOOK."$UPPER(cFrom) .AND. lConfAut
nPort := 587
cSmtp := "smtp-mail.outlook.com"
lSecureServ := .T.
ENDCASE
#INCLUDE "HBCompat.ch"
FOR I:=1 TO LEN(aDestinat)
xTo +=aDestinat[I]+';'
NEXT
FOR I:=1 TO LEN(aCc)
xCc +=aCc[I]+';'
NEXT
FOR I:=1 TO LEN(aBcc)
xBcc +=aBcc[I]+';'
NEXT
BEGIN SEQUENCE WITH {|oErr|Break(oErr)}
IF (oConfig := WIN_OLECREATEOBJECT("CDO.Configuration"))==NIL
MSGEXCLAMATION('Error al crear objeto CDO.Configuration')
//RETURN(.F.)
ENDIF
WITH OBJECT oConfig:Fields
:Item("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value := cServer
:Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value := nPort
:Item("http://schemas.microsoft.com/cdo/configuration/sendusing"):Value := 2
: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 := cFrom
:Item("http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value := cPass
:Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := nTimeOut
:Update()
END WITH
//MSGBOX(cServer+CRLF+STR(nPort,5)+CRLF+cFrom+CRLF+cPass)
IF (oMail := WIN_OLECREATEOBJECT ("CDO.Message"))==NIL
MSGEXCLAMATION('Error al crear objeto CDO.Message')
//RETURN(.F.)
ENDIF
WITH OBJECT oMail
:Configuration := oConfig
:From := cFrom
:To := xTo
IF !EMPTY(xCc)
:Cc := xCc
ENDIF
IF !EMPTY(xBcc)
:Bcc := xBcc
ENDIF
:Subject := cSubject
:TextBody := cBody
FOR I:=1 TO LEN(aAdjunto)
IF HB_FILEEXISTS(aAdjunto[I])
:AddAttachment(aAdjunto[I])
//HB_IDLESLEEP(.5)
//MSGBOX(aAdjunto[2])
ENDIF
NEXT
WITH OBJECT oMail:Fields
//:Item("urn:schemas:httpmail:importance"):Value := nPriority //2=alto 1=normal 0=bajo
//:Item("urn:schemas:mailheader:X-Priority"):Value := nPriority-1
//IF lAvisaOk
// :Item("urn:schemas:mailheader:return-receipt-to"):Value := cFrom
// :Item("urn:schemas:mailheader:disposition-notification-to"):Value := cFrom
//ENDIF
//:Update()
ENDWITH
//:DSNOptions := 0
:Send()
ENDWITH
//MSGBOX(cFrom+CRLF+xTo+CRLF+cSubject+CRLF+cBody+CRLF+aAdjunto[1])
RECOVER USING oErr
MSGEXCLAMATION("Error....: " + TRANSFORM(oErr:GenCode,NIL) + HB_OSNEWLINE() + ;
"SubCode..: " + TRANSFORM(oErr:SubCode,NIL) + HB_OSNEWLINE() + ;
"OS_Code..: " + TRANSFORM(oErr:OsCode,NIL) + HB_OSNEWLINE() + ;
"SubSystem: " + TRANSFORM(oErr:SubSystem,NIL) + HB_OSNEWLINE() + ;
"Message..: " + oErr:Description)
lRetorno := .F.
END SEQUENCE
//:HTMLBody := "<h1>This is a message.</h1>" // TEXTO EN FORMATO HTML
//:CreateMHTMLBody := "https://www.w3schools.com/asp/" // ENVIAR UNA PAGINA WEB
//:CreateMHTMLBody := "file://c:/mydocuments/test.htm" // ENVIAR UNA PAGINA WEB LOCAL
RETURN(lRetorno)
--
Gracias Ricardo.
NO lo he probado pero lo he guardado para probar más pronto que tarde.
Donde se encuentra el archivo #INCLUDE "HBCompat.ch" ????
Gracias
Saludos
Antonio Vázquez
--
--
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/00d901da7f0a%2422e144c0%2468a3ce40%24%40gmail.com.
Hola José.
Lamentablemente no tengo nada.
Saludos...
Ricardo Sassy
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAGuw8rUqO9j5AFqS0XGv3JMpq_8WzAP2RRVBUmqc2bhv4iJcEg%40mail.gmail.com.
Gracias, Ricardo
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/02b301da7f50%24298a1f40%247c9e5dc0%24%40gmail.com.
Gracias Ricardo, como siempre muy colaborativo!
Saludos
Marcelo Stisman
De: oo...@googlegroups.com [mailto:oo...@googlegroups.com] En nombre de Ricardo Sassy
Enviado el: 25 de marzo de 2024 18:33
Para: oo...@googlegroups.com
Asunto: [oohg] ENVIO DE CORREOS
Hola Colegas.
--
--
--
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvwzWJ_iJ%3DhH%2BWRdkLMChPcQZQ4EE3DT6XgScAzn-qVJXQ%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAGuw8rV3okc8J3OLwVWUEXBZtMn0--6UFk8CQR5sedekTXCWog%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvzjcofcm91JH0hF3CbM%2BqsdFteyQU%3D37Fk3Fo%3D9D9fFRg%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAGuw8rUUzED4aJtpYfJ1kQGsHGqJuX5A8gjRDeLntPPvv2_9Vg%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvwn4vyQRagFsEigWObxktf6YSs7k%2BWQaCU%3DJ9WwxwEhOA%40mail.gmail.com.
Hola.
A raíz de la dificultad que existe para saber qué librerías se deben referenciar en la compilación para poder utilizar ciertas funciones o extensiones de Harbour recomiendo incluir la mayoría de las librerías disponibles.
Más abajo copio la lista de todas las libs que estoy incluyendo en mi script genérico de compilación.
Lo que se logra con esto es evitar errores de linkeo por la falta de inclusión de tal o cual librería o tener que buscar “a ciegas” donde está cada cosa.
En contra de lo que muchos colegas suponen el hecho de referenciar muchas librerías no implica necesariamente un crecimiento del tamaño del exe resultante.
El enlazador de Harbour (gcc.exe) incluye en el exe final sólo aquellas librerías de las cuales se utilizó alguna función o procedimiento.
El resto de las librerías son ignoradas y no influyen en el tamaño final del exe.
Más abajo mi lista, que abarca casi todos los tópicos usuales (ssl, sql, debug, zebra, bostaurus, modo mixto, etc.).
Saludos...
Ricardo Sassy
-loohg
-lgtgui
-lgtwin
-lhbct
-lhbhpdf
-llibhpdf
-lrddads
-lhbmemio
-lhbmisc
-lhbmzip
-lhbtip
-lhbzebra
-lrddsql
-lhbziparc
-lminizip
-lhbwin
-lpng
-lxhb
-lbostaurus
-lhbprinter
-lminiprint
-luser32
-lwinspool
-lgdi32
-lcomctl32
-lcomdlg32
-lole32
-loleaut32
-luuid
-lmpr
-lwsock32
-lws2_32
-lmapi32
-lwinmm
-lvfw32
-lmsimg32
-liphlpapi
-lhbnf
-lhbodbc
-lodbc32
-lmysqldll
-lsddodbc
-lrddado
-lsocket
-leay32
-lssleay32
-lcrypt
-lcrypt32
-lhbtipssl
-lhbssl
-lsup35oo
De: oo...@googlegroups.com [mailto:oo...@googlegroups.com] En nombre de Fernando Javier Borzone
Enviado el: martes, 2 de abril de 2024 17:14
Para: oo...@googlegroups.com
Asunto: Re: [oohg] ENVIO DE CORREOS
Hola José. Muchas gracias
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvwn4vyQRagFsEigWObxktf6YSs7k%2BWQaCU%3DJ9WwxwEhOA%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/0c6c01da85c6%2477d0c380%2467724a80%24%40gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/0c6c01da85c6%2477d0c380%2467724a80%24%40gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvzcQ891g3Mi9ofGJcP0Wb2Z_iU7QjTNEE3xaBaDnSyt6Q%40mail.gmail.com.
¿Qué versión de Harbour estás usando?.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvzcQ891g3Mi9ofGJcP0Wb2Z_iU7QjTNEE3xaBaDnSyt6Q%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/135b01da86dc%2485d61d60%2491825820%24%40gmail.com.
hbcurl
instead)Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/CAKrMrvzcQ891g3Mi9ofGJcP0Wb2Z_iU7QjTNEE3xaBaDnSyt6Q%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/oohg/135b01da86dc%2485d61d60%2491825820%24%40gmail.com.
Hola José.
¿Desde qué dominio estás enviando correo con hb_sendmail?.
¿Es un dominio propio o estás usando cuentas @google, @hotmail o @outlook?.
Saludos...
Ricardo Sassy
--
Has recibido este mensaje porque estás suscrito al grupo "[oohg]" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a oohg+uns...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/oohg/d515dfe7-93dc-4917-b638-1021fbbc61cdn%40googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/oohg/018f01dc1ac2%24043e6d90%240cbb48b0%24%40gmail.com.
Hola José.
Nunca me pasó eso que tu dices.
Mis sistemas envían correos usando HB_SENDMAIL con dominios propios sin ningún problema y sin necesidad de tener abierto Outllook.
La verdad que no se me ocurre que puede estar fallando.
¿El envío te devuelve algún error o simplemente no hace nada?.
Saludos...
Ricardo Sassy
Para ver este debate, visita https://groups.google.com/d/msgid/oohg/CAGuw8rW6ZL%2BuO%2B-vw-prkG28j08hoY_uwHJ2piNKBEqpfy8DMg%40mail.gmail.com.
Para ver este debate, visita https://groups.google.com/d/msgid/oohg/00b601dc1b7b%24afe1f220%240fa5d660%24%40gmail.com.