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<hsuli...@compudisk.com.ar>
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/smtpauthenticate";)
> = "1"
>     .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl";) =
> "1"
>     .Item("http://schemas.microsoft.com/cdo/configuration/sendusername";)
> = "mim...@gmail.com <avdaembrag...@gmail.com>"
>     .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. <mim...@gmail.com <avdaembrag...@gmail.com>>"
>     .To = maildest          &&&&   "Hernan <her...@hotmail.com.ar
> <hsuli...@compudisk.com.ar>>"
>    &&     .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_-5932639359262942568_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
>
>


-- 
Ing. Carlos Alejandro Pérez

Responder a