Page 1 of 1

Enviar informe pdf via email

Posted: Fri May 01, 2015 5:00 am
by J. Ernesto
Compañeros buenas

Necesito enviar un informe diario en el formato PDF:

1- Generar automáticamente el informe en PDF, sin que intervenga el usuario,
2- Guardarlo en una carpeta ese mismo informe sin intervención de usuario,
3- y Enviarlo automáticamente vía EMail a varios usuarios.

Agradezco un pequeño ejemplo.

Desde ya muchas gracias

Re: Enviar informe pdf via email

Posted: Fri May 01, 2015 8:11 pm
by surGom
Ernesto yo uso para estos casos la clase tpdf.

https://drive.google.com/file/d/0B8UT40 ... sp=sharing

Ahí hay un pequeño ejemplo, y un pdf generado. Esta para utilizar en Harbour


Luis

Re: Enviar informe pdf via email, generar pdf solucionado

Posted: Fri May 01, 2015 10:51 pm
by J. Ernesto
Luis muchas gracias

Descargando, voy a analizarlo y hacer pruebas

La generación del PDF si intervención del usuario esta solucionada de la siguiente forma:

Code: Select all | Expand


 PRINT oPrn NAME 'Print_10_2' FILE "prueba_2.pdf"                                                                 && FROM USER PREVIEW FILE "prueba.pdf"
 


La idea ahora es ese mismo archivo PDF enviárselo a una serie de clientes vía EMail.

Gracias

Re: Enviar informe pdf via email

Posted: Sat May 02, 2015 11:23 am
by surGom
Ernesto uso esa clase para enviar los pdf directamente desde un prg ya que es bastante limitada en cuanto el uso de fuentes, pero muy efectiva y hace los pdf muy livianos.


Luis

Re: Enviar informe pdf via email

Posted: Mon May 04, 2015 10:56 am
by postinelli
Hola Ernesto

así lo hago yo

Function GMAILME (cDestino,cAsunto,cTexto,cAdjunto )

Local oEmailCfg,oEmailMsg,oError,cHtml

/*
Local ListaEmail:= GetPvProfString("Reportes","EMAIL","NO", cIniFile)
Local xserver := GetPvProfString("Reportes","SERVEREMAIL","", cIniFile)
Local xpuerto := VAL(GetPvProfString("Reportes","PUERTOEMAIL","", cIniFile))
Local xrememail := GetPvProfString("Reportes","REMITEEMAIL","", cIniFile)
Local xremnombre:= GetPvProfString("Reportes","USUARIOEMAIL","", cIniFile)
Local xclave := GetPvProfString("Reportes","PASSWEMAIL","", cIniFile)
*/


//DEFAULT cAdjunto:="cAdjunto"
DEFAULT cAsunto :="From"
DEFAULT cTexto := "cTexto"

if Empty(cDestino )
MsgWait("No ha puesto un destinatario")
Return .f.
endif

TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value :=xserver // "smtp.gmail.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := xpuerto //465
: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 := xrememail // User
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := xclave // Password
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 30
:Update()
END WITH
CATCH oError
MsgInfo( "No se ha enviado el " + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
END
oError:=NIL

TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = chr(34)+'IDE' +chr(34)+ xrememail
//:From = chr(34)+"IDE"+chr(34) + "<ide.jardin@speedy.com.ar>" // lo que quieras que aparezca en el mensaje
:To = cDestino
:Subject = cAsunto
:MDNRequested = .T.
:TextBody = cTexto
if !Empty(cAdjunto)
:AddAttachment(cAdjunto)
endif
END WITH
oEmailMsg:Send()
CATCH oError
MsgWait("No se ha enviado el mensaje" + ";" + 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 )
END

//MsgInfo("Correo enviado correctamente")

Return .T.
//----------------------------------------------------------------------------//

Re: Enviar informe pdf via email

Posted: Tue May 05, 2015 9:46 pm
by J. Ernesto
Postinelli Gracias

Al probar el ejemplo me genera el error que aparece en la siguiente imagen:

"Message: El Protocolo especificado es desconocido"
(0x800C000D)

[img]
http://s4.postimg.org/6mal1m4p9/error_email.jpg
[/img]

Que me hace falta enlazar en la compilación, o como hago para solucionar este error

Re: Enviar informe pdf via email

Posted: Tue May 05, 2015 10:11 pm
by surGom
Ernesto ahí ya no sé cual puede ser el error yo uso el programa Rmail de Ricardo de Moura Marques

Este es el que utilizo tanto en harbour como los hechos en xharbour

https://www.4shared.com/file/_RZoap7Cce/RMail.html

No se si esto te pueda ayudar

Luis

Re: Enviar informe pdf via email

Posted: Wed May 06, 2015 11:08 am
by postinelli
Hola Ernesto

no es error compilacion ni que te falte algo
es un problema de configuracion de tu cuenta de correo

gmail utiliza el puerto 465, pero el puerto habitual para las cuentas smtp es 25

además debes verificar si valida ssl

aqui te paso la misma funcion pero que tiene para validad ssl, me parece que ese es tu problema


//-----------------------------------------------------------------------------------------------
Function GMAILME (cDestino,cAsunto,cTexto,cAdjunto )

Local oEmailCfg,oEmailMsg,oError,cHtml

Local cServer:= GetPvProfString("Enviador","SERVERSTP" ,"", cIniFile)
Local nPortEmail:=VAL(GetPvProfString("Enviador","EMAILPUERTO","25", cIniFile))
Local cEmailFrom:=GetPvProfString("Enviador","EMAILFROM" ,"", cIniFile)
Local cEmailUser:=GetPvProfString("Enviador","EMAILUSER" ,"", cIniFile)
Local cEmailPass:=GetPvProfString("Enviador","EMAILPASSW" ,"", cIniFile)
Local cEmailSsl:=GetPvProfString("Enviador","EMAILSSL" ,"NO", cIniFile)

DEFAULT cAdjunto:=""
DEFAULT cAsunto :=""
DEFAULT cTexto := ""

if Empty(cDestino )
msgAlert("no ha puesto un destinatario")
Return .f.
endif

TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := cServer //"smtp.fibertel.com.ar" ///"smtp.gmail.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := nPortEmail //25 //465
: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.
if cEmailSsl='SI'
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .T. //para servidores con ssl
else
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .F. //para servidores sin ssl
endif
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := cEmailUser //
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := cEmailPass //
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 30
:Update()
END WITH
CATCH oError
MsgInfo( "No se ha enviado el " + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
END
oError:=NIL

TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = chr(34)+Empresa+' '+chr(34) + '<'+cEmailFrom+'>' // This will be displayed in the From (The email id does not appear)
:To = cDestino
:Subject = cAsunto
:MDNRequested = .T.
:TextBody = cTexto
if !Empty(cAdjunto)
:AddAttachment(cAdjunto)
endif

END WITH
oEmailMsg:Send()
CATCH oError
MsgInfo("No se ha enviado el mensaje" + ";" + 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 )
END

// MsgInfo("Correo enviado correctamente")

Return .T.
//-----------------------------------------------------------------------------------------------

Re: Enviar informe pdf via email

Posted: Wed May 06, 2015 5:20 pm
by J. Ernesto
Muchas gracias

La función RMail.prg, funciono bien, solo hay que hacer unos ajustes, en mi caso necesito que sin que el usuario se de cuenta, enviar informes de auditoria a una sede central.

Tiene bastante usos estas rutinas, como validar donde se estan ejecutando nuestros programas, en el caso de post anteriores donde se buscaba una forma de hacerlo.

Probare la última solucion cmbiando el puerto

Gracias por la colaboracion.

Saluods