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