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=sharingAhí 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.htmlNo 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