Hola, te paso lo que tengo hecho yo. se genera con una aplicación que se
llama foxypreviewer.app. Esta aplicación conviene que la coloques en un
lugar visible desde tu aplicación.
Primero, chequeamos que exista (yo la puse en un volumen compartido de la
red):
IF FILE("s:\foxypreviewer\foxypreviewer.app")
DO s:\foxypreviewer\foxypreviewer.app
ELSE
=MESSAGEBOX("No se ha encontrado la biblioteca de envío de archivos PDF por
correo electrónico. No se puede proceder en estas condiciones. Asegurese
que puede acceder al servidor central")
RETURN
ENDIF
Luego generamos la tabla con los ID de los documentos que deseamos generar,
supongamos que sea un cursor qFactura, cuyo ID es IDFactura, y recorremos
la tabla generando con foxypreviewer un PDF por cada fila:
SELECT qfactura
SCAN
lcPDFFileName = "Factura "+ALLTRIM(qfactura.idfactura)+".PDF"
lcFullPathPDF = "s:\facturas\"+lcPDFFileName
? "Generando factura "+TRANSFORM(IDFactura)+".."
=GenerarFacturaPorID(IDFactura) && este proceso generico creará el
cursor con tu factura (para mandarlo al reporte), vos sabrás como
implementarlo
* ahora generamos el PDF del reporte de la factura, nos deja un
archivo fisico
REPORT FORM factura OBJECT TYPE 10 TO FILE (lcFullPathPDF)
* ahora intenta enviar el correo, vinculamos de alguna manera con una tabla
* que tiene los e-mails de los receptores en un cursor qmail
?? "enviando correo a "+ALLTRIM(qmail.email)+".."
* este método envía efectivamente el correo al destinatario
qmail.email
lcResult=EnviarMailGmail(qfactura.IDFactura, lcPDFFileName, lcFullPathPDF,
ALLTRIM(qmail.email))
IF lcResult<>"OK"
?? "no se ha podido enviar el mensaje, el error es:" + lcResult
RETURN .F.
ELSE
?? "OK"
ENDIF
ENDSCAN
El codigo del metodo EnviarMailGmail lo tengo hecho para el servicio de
Gmail, pongo una contraseña cualquiera para que veas donde va:
*************************
PROCEDURE EnviarMailGmail
*************************
LPARAMETERS IDFactura, cArchivo As String, lcFullFileName as String,
cEmailAddress as string
LOCAL loCfg as CDO.Configuration
LOCAL loMsg AS CDO.Message
loCfg = CREATEOBJECT("CDO.Configuration")
WITH loCfg.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "
smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") =
465
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = .T.
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")
= 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "
[email protected]" && mi correo
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") =
"pass2011" && una contraseña de mi cuenta
.Update
ENDWITH
* ahora lo que hacemos es armar el cuerpo del mensaje de correo electrónico
* el cuerpo va en HTML, pero el adjunto es el PDF generado por el
foxypreviewer
* el HTML del mensaje va en una plantilla, que recupero a memoria
* y luego le cambio los campos marcados con @, por los datos reales
cHTMLBody = FILETOSTR("s:\recibos\plantillaclientes.html") && es un
archivo estático, inmutable
* reemplaza los campos, suponiendo que la plantilla sea algo como
("<body>Usted recibe el archivo @ARCHIVO perteneciente a la factura
@IDFACTURA generado el día @FECHAHOY...</body>")
cHTMLBody = STRTRAN(cHTMLBody, "@IDFACTURA", TRANSFORM(IDFactura))
cHTMLBody = STRTRAN(cHTMLBody, "@ARCHIVO", cArchivo)
cHTMLBody = STRTRAN(cHTMLBody, "@FECHAHOY", DTOC(DATE()))
* crea el objeto de colaboración:
loMsg = CREATEOBJECT ("CDO.Message") && no deberia error, todos los
Windows tienen CDO
WITH loMsg
.Configuration = loCfg
.From = "[email protected]"
.To = cEmailAddress
.Subject = "Información sobre la factura "+IDFactura
.HTMLBody = cHTMLBody
.AddAttachment(lcFullFileName) && aca adjuntamos el PDF generado por el
foxypreviewer
lcResult="OK"
TRY
.Send()
CATCH TO err
lcResult=err.Message
ENDTRY
ENDWITH
RETURN lcResult
bueno, eso es todo, perdón por el otro mail que no lo había terminado de
editar, espero que este se entienda.
Carlos A. Pérez
El 17 de mayo de 2017, 15:34, Carlos Alejandro PEREZ<[email protected]>
escribió:
> Hola!! Por favor desestimar la respuesta anterior, lo envié al apretar
> ENTER en algun lado sin haberlo terminado de editar!!!
> Carlos
>
> El 17 de mayo de 2017, 15:33, Carlos Alejandro PEREZ<[email protected]>
> escribió:
>
>> hola, te paso lo que tengo hecho yo. El PDF se genera con una aplicación
>> que se llama foxypreviewer.app. Esta aplicación conviene que la coloques en
>> un lugar visible desde tu aplicación.
>>
>> Primero, chequeamos que exista (yo la puse en un volumen compartido de la
>> red):
>>
>> IF FILE("s:\foxypreviewer\foxypreviewer.app")
>> DO s:\foxypreviewer\foxypreviewer.app
>> ELSE
>> =MESSAGEBOX("No se ha encontrado la biblioteca de envío de archivos PDF
>> por correo electrónico. No se puede proceder en estas condiciones.
>> Asegurese que puede acceder al servidor central")
>> RETURN
>> ENDIF
>>
>> Luego generamos la tabla con los ID de los documentos que deseamos
>> generar, supongamos que sea un cursor qFactura, cuyo ID es IDFactura
>>
>> SELECT qfactura
>> SCAN
>> lcPDFFileName = "Factura "+ALLTRIM(qfactura.idfactura)+".PDF"
>> lcFullPathPDF = "s:\facturas\"+lcPDFFileName
>> ? "Generando factura "+TRANSFORM(IDFactura)+".."
>> =GenerarFacturaPorID(IDFactura)
>> orecs.getrecbynrorec(cNroRec) && genera el cursor lv_recbynrorec
>> * copia el cursor a lv_recbynrorec
>> SELECT * FROM lv_recbynrorec INTO CURSOR recibos
>> SELECT recibos
>> ?? "generando archivo PDF.."
>> REPORT FORM recibos3 OBJECT TYPE 10 TO FILE (lcFullPathPDF)
>> ACTIVATE WINDOW frmEnviarMails
>> * ahora intenta enviar el correo
>> *LPARAMETERS cNombreSocio as String, cNroRec as String, cPeriodo as
>> String, cLote as String, cArchivo As String, lcFullFileName as String,
>> cEmailAddress as string
>> ?? "enviando correo a "+ALLTRIM(qmail.email)+".."
>> lcResult=EnviarMailGmail(qmail.prof_nombr, qmail.nrorec,
>> TRANSFORM(qmail.periodo,"@R 9999-99"), qmail.ordrec, lcPDFFileName,
>> lcFullPathPDF, ALLTRIM(qmail.email))
>> IF lcResult<>"OK"
>> ?? "no se ha podido enviar el mensaje, el error es:" + lcResult
>> RELEASE WINDOWS frmEnviarMails
>> RETURN .F.
>> ELSE
>> ?? "OK"
>> ENDIF
>>
>>
>> ENDSCAN
>>
>> GO TOP IN lv_reciboshdbyper
>> SELECT qmail
>>
>> DO FORM enviarcorreogmail && ventana que informa el avance
>> SCAN
>> ACTIVATE WINDOW frmEnviarMails
>> lcPDFFileName = ALLTRIM(qmail.matricula)+"-"+qmail.nrorec+".PDF"
>> lcFullPathPDF = "s:\recibos\"+lcPDFFileName
>> cNrorec = ALLTRIM(qmail.nrorec)
>> ? "Generando recibo "+cNroRec+".."
>> * LOCAL orecs as recibos OF recibos.prg
>> orecs.getrecbynrorec(cNroRec) && genera el cursor lv_recbynrorec
>> * copia el cursor a lv_recbynrorec
>> SELECT * FROM lv_recbynrorec INTO CURSOR recibos
>> SELECT recibos
>> ?? "generando archivo PDF.."
>> REPORT FORM recibos3 OBJECT TYPE 10 TO FILE (lcFullPathPDF)
>> ACTIVATE WINDOW frmEnviarMails
>> * ahora intenta enviar el correo
>> *LPARAMETERS cNombreSocio as String, cNroRec as String, cPeriodo as
>> String, cLote as String, cArchivo As String, lcFullFileName as String,
>> cEmailAddress as string
>> ?? "enviando correo a "+ALLTRIM(qmail.email)+".."
>> lcResult=EnviarMailGmail(qmail.prof_nombr, qmail.nrorec,
>> TRANSFORM(qmail.periodo,"@R 9999-99"), qmail.ordrec, lcPDFFileName,
>> lcFullPathPDF, ALLTRIM(qmail.email))
>> IF lcResult<>"OK"
>> ?? "no se ha podido enviar el mensaje, el error es:" + lcResult
>> RELEASE WINDOWS frmEnviarMails
>> RETURN .F.
>> ELSE
>> ?? "OK"
>> ENDIF
>> ENDSCAN
>> RELEASE WINDOWS frmEnviarMails
>>
>>
>> El 17 de mayo de 2017, 12:10, Hernan O. Suligoy<[email protected]
>> > escribió:
>>
>>> Hola Rafael...
>>> 1.- Foxypreviewer
>>>
>>> PUBLIC PUBLI_FoxyPreview
>>> IF FILE(ADDBS(CURDIR()) + 'Foxypreviewer.app')
>>> DO FoxyPreviewer.app
>>> PUBLI_FoxyPreview = ADDBS(CURDIR()) + 'foxypreviewer.app'
>>> ELSE
>>> PUBLI_FoxyPreview = ''
>>> ENDIF
>>> *--- Create FoxBarcode Object
>>> local loFbc, lcImage, lcBarCode
>>> m.loFbc = CREATEOBJECT("FoxBarcode")
>>> *-- Set properties
>>> m.loFbc.nBarcodeType = 132 && Interleaved 2 of 5
>>> m.loFbc.nFactor = 2
>>> m.loFbc.cImageType = "BMP"
>>> m.loFbc.nImageWidth = 900
>>> m.lcBarCode = codbar
>>>
>>> nombre = (transform(nSerie, "@L 9999") +"-"+ transform(nNumero, "@L
>>> 99999999"))
>>> lcNombyUbi = ADDBS(CURDIR()) + '\Docum\' +abre+nombre + '.pdf'
>>> thisform.pdfname = lcNombyUbi
>>>
>>> Report Form docFelecPDF.frx OBJECT TYPE 10 To FILE (lcNombyUbi)
>>> DO FOXYPREVIEWER.APP WITH "RELEASE"
>>>
>>> 2.- El mismo Foxypreviewer lo graba
>>>
>>>
>>>
>>>
>>> 3.- Cdo de Windows...
>>>
>>> LOCAL loCfg, loMsg, lcFile, loErr
>>>
>>> maildest = thisform.emailclte
>>> && mailcc = thisform.emailcc
>>>
>>> mailname = ALLTRIM(thisform.MailName)
>>> mailcc = ALLTRIM(thisform.MailCc)
>>> asunto = ALLTRIM(thisform.MailAsu)
>>> mensaje = ALLTRIM(thisform.Mensa)
>>>
>>> loErr = .f.
>>> loCfg = CREATEOBJECT("CDO.
>>> Configuration")
>>> WITH loCfg.Fields
>>> .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")
>>> = "smtp.gmail.com"
>>> .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")
>>> = 465
>>> .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") =
>>> 2
>>> .Item("http://schemas.microsoft.com/cdo/configuration/smtpco
>>> nnectiontimeout") = 10
>>> .Item("http://schemas.microsoft.com/cdo/configuration/smtpau
>>> thenticate") = "1"
>>> .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl")
>>> = "1"
>>> .Item("http://schemas.microsoft.com/cdo/configuration/sendusername")
>>> = "[email protected] <[email protected]>"
>>> .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")
>>> = "pass"
>>> .Update
>>> ENDWITH
>>> loMsg = CREATEOBJECT ("CDO.Message")
>>>
>>> WITH loMsg
>>> .Configuration = loCfg
>>> *-- Remitenete y destinatarios
>>> .From = "Empresa S.R.L. <[email protected] <[email protected]>
>>> >"
>>> .To = maildest &&&& "Hernan <[email protected]
>>> <[email protected]>>"
>>> && .Cc = ""
>>>
>>> *- Notificación de lectura
>>> .Fields("urn:schemas:mailheader:disposition-notification-to") =
>>> .From
>>> .Fields("urn:schemas:mailheader:return-receipt-to") = .From
>>> .Fields.Update
>>> *-- Tema
>>> *-- .Subject = "Ejemplo del " + TTOC(DATETIME())
>>> .Subject = asunto
>>> .TextBody = mensaje
>>>
>>> ***** .HTMLBody = ""
>>>
>>> atachfile = ALLTRIM(thisform.atach)
>>>
>>> &&& asunto = "Resumen Cta. Cte. "
>>> &&& mensaje = "Adjuntamos resumen de su cuenta corriente. Atentamente.
>>> BsEstudio"
>>>
>>> && *-- Formato HTML desde la Web
>>> && .CreateMHTMLBody("http://comunidadvfp.blogspot.com/p/acerca-
>>> de.html", 0)
>>> *-- Archivo adjunto
>>> &&&& lcFile = GETFILE()
>>> &&&& IF NOT EMPTY(lcFile)
>>> && .AddAttachment(lcFile)
>>> .AddAttachment(atachfile)
>>> &&&& ENDIF
>>> ENDWITH
>>>
>>> *-- Envio el mensaje
>>> loErr = loMsg.Send()
>>>
>>> IF ISNULL(loErr)
>>> loMsg = NULL
>>> loCfg = NULL
>>> MESSAGEBOX("Mensaje enviado!", "Envio Mail...")
>>> else
>>> MESSAGEBOX("No se pudo enviar el mensaje" + CHR(13) + ;
>>> "Error: " + TRANSFORM(loErr.ErrorNo) + CHR(13) + ;
>>> "Mensaje: " + loErr.Message , 16, "Error")
>>> endif
>>>
>>>
>>>
>>>
>>>
>>>
>>> No lo hago por lote, lo hago individual, pero funciona de 10, no se si
>>> te sirve, habria que
>>> serializar el proceso..
>>>
>>> Saludos..
>>>
>>> Hernan Suligoy
>>>
>>>
>>>
>>> El 16/05/2017 a las 05:30 p.m., rafael copquin escribió:
>>>
>>> Necesito generar un lote de facturas electrónicas en formato pdf y luego
>>> enviarlas automáticamente por correo.
>>>
>>> Estuve viendo varias opciones que googlie por ahi, pero ninguna me
>>> funciona.
>>>
>>> 1. Básicamente tengo un cursor con los datos de N facturas generadas
>>> en un lote con sus CAE recibidos.
>>> 2. Ahora quiero generar sendos pdf (original y duplicado) y dejarlos
>>> grabados en una carpeta.
>>> 3. Al mismo tiempo los quiero enviar automáticamente por email a sus
>>> respectivos clientes.
>>>
>>> Sé que esto ya se ha hecho miles de veces, pero yo hasta ahora nunca las
>>> generé por lote (como es este caso) y agradecería un ejemplo de cómo se
>>> hace, o sea:
>>>
>>> 1. cómo genero el pdf
>>> 2. cómo se hace para que se grabe en la carpeta
>>> 3. cómo se envía por email
>>>
>>> Gracias a todos
>>>
>>> Rafael Copquin
>>>
>>>
>>>
>>>
>>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>>> Libre
>>> de virus. www.avg.com
>>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>>> <#m_1517080481578550256_m_4171107467168842668_m_-5932639359262942568_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>
>>>
>>>
>>
>>
>> --
>> Ing. Carlos Alejandro Pérez
>>
>
>
>
> --
> Ing. Carlos Alejandro Pérez
>
--
Ing. Carlos Alejandro Pérez