Después de mucho tiempo, retomamos los post de programación, para lo cual, les vamos a mostrar este pequeño ejemplo en el que veremos como podemos crear un ejemplo de carta personalizada en formato PDF a través de PHP el cual adjuntaremos a un correo, que será enviado a la dirección de correo del contacto.
Para este ejemplo necesitaremos dos librerías:
- Libreria FPDF (para crear el PDF)
- Libreria AttachMailer (Para adjuntar el PDF y enviarlo por correo);
Usaremos la clase AttachMailer, porque es la forma mas facil y efectiva de ajustar un archivo PDF a un correo y enviarlo, pues esta clase fue diseñada exclusivamente para eso, no adjunta ningún otro tipo de archivos.
Para comenzar crearemos un HTML en el cual pediremos el nombre y la dirección de correo electrónico de la persona a la que le enviaremos la carta, veamos el código:
Como se puede apreciar, en la linea 18, comenzamos a crear el formulario , cuyo resultado aparecerá en una pagina o pestaña a parte, lo cual se especifica a través del atributo target, que como vemos esta en «_blank»
En la misma linea se observa que los datos «nombre y correo» serán enviados a un PHP llamado «01enviar.php», ahora veamos como se ve el mencionado archivo PHP.
En la linea 3 agregamos la libreria AttachMailer, en la 4 agregamos el FPDF, de la linea 6 a la 34 lo que vemos es la modificación de la clase FPDF para que agregue los pie de pagina y encabezados tal y como nos muestran en los manuales de FPDF.
Las lineas 37 y 38 usamos el mysql_real_escape_string para eliminar la inyección SQL al recibir el nombre y la dirección de correo a donde enviaremos los datos, de la linea 40 a la 60 vemos la creación de PDF, observe que en la 61 comenzamos con lo interesante.
En la linea 61 usamos el metodo output, indicando como parametros un nombre de archivo y el parámetro «F» para indicarle que el PDF que creamos no se muestre en pantalla, sino que se almacene en un archivo, recuerde que si colocamos los paréntesis vacios, el PDF se muestra a traves del plug-in del navegador, pero en este caso queremos que se guarde en un archivo, aclaremos que el archivo quedara almacenado en la carpeta del servidor donde tenemos el PHP.
Una vez creado el archivo Pdf, hay que adjuntarlo a un correo, en la linea 67 creamos el objeto correo, con los parámetros:
- desde -dirección de correo desde la cual se enviara el correo ($from)
- para – dirección de correo destinatario ($to)
- el asunto del correo
- el mensaje del correo.
Una vez creado el mensaje, en la 68 usamos el medido attachFile, para adjuntar el archivo indicado en la variable $file, la cual por error colocamos, pues de debió llamar $archivo y es una variable de texto, en la cual usted colocara el nombre del archivo, algo así como
$archivo=»documento.pdf»
Nos disculpamos por la omisión de antemano, finalmente en la linea 70 usamos el metodo send, el cual enviara el correo, y devolverá los resultados indicados en la variable $resultado.
Una vez que se ejecuta el comando send, el archivo se adjunta y se envía, tiene un poco de retraso, pero nada que sea exagerado,
Hola amigos para los que no les funcione tienen primero que loguearse en esta pagina https://www.phpclasses.org/package/5728-PHP-Send-email-message-with-an-attached-PDF-file.html#information y recien descargar la version 2009 de AttachMailer.. después hay dos correciones en el código:
Poner esto:
después de $pd->Ln(1.5);
$archivo = «cualquier_nombre.pdf»; //poner esta variable
$pd->Output(«F», $archivo); //noten que he cambiado el orden de los parametros
y obiamente borrar esto: $pd->Output($archivo, «f»);
Por ultimo borra la linea : $mailer->attachFile($fila); y poner lo siguiente: $mailer->attachFile($archivo);
//Espero haber aportado…Saludos amigos !!!
Me gustaMe gusta
Hola! ha pasado un tiempo de este post pero alguien me podría ayudar? Tengo que crear un formulario, que se genere un pdf y q a su vez se envíe por correo
Me gustaMe gusta
Probé el código pero después de validar usando la función send(), sale el segundo estado de «Problema al enviar» alguna idea ya corrobore que agregue la librería correcta y esta bien
Me gustaMe gusta
el archivo «conecta.php» que incluyes en la linea 2 que código es el que ejecuta??
Me gustaMe gusta
Ese es para conectar con la base de daros
Me gustaMe gusta
Hola disculpa de donde descargaste ese paquete ? porq he descargado del link de arriba el AttachMailer pero dentro no hay ninguna funcion que se llame attachFile y la clase se llama diferente puedes ayudarme ? mi correo es coronadoew18@gmail.com
Me gustaMe gusta
se descarga de la pagina de PHPClases https://www.phpclasses.org/package/5728-PHP-Send-email-message-with-an-attached-PDF-file.html#information
Me gustaMe gusta
En la Línea 61 está el error, debeis comprobar que archivo se os crea en el servidor, en mi caso es doc.pdf
Modificando el codigo en la línea 61 y declarando en la línea 62 $archivo se corrige el error de lectura del PDF.
$pd->Output($archivo,»doc.pdf»);
$archivo=»doc.pdf»;
Me gustaMe gusta
Van a compartir «conocimiento» que ni siquiera ustedes dominan? Gracias?
Me gustaMe gusta
Estimado, probe el código y si logro enviar el PDF, pero al intentar abrir me sale que el documento esta dañado y/o se envio como adjunto de correo electrónico y no se decodifico correctamente, tu ayuda por favor. Muchas gracias.
Me gustaMe gusta
disculpa, mi pregunta, duda o como quieras llamarlo es… donde debo guardar los archivos de las librerias, ya las descargue y ya las descomprimi y ahora en donde van guardadas
Me gustaMe gusta
en la misma carpeta donde estarán los HTML y PHP que forma el modulo que lo usara, o los puedes poner en una carpeta y en el include le indicas que la librería esta en la carpeta
Me gustaMe gusta
No funciona, esta mal programado
Me gustaMe gusta
Si ya sabes donde estan los errores, porque no los corriges?
Me gustaMe gusta
Estimados,
Dónde se puede descargar el código completo?
Slds,
Me gustaMe gusta
en la web del desarrollador o en su git-hub
Me gustaMe gusta
Una pregunta, ¿Cómo podría modificar el AttachMailer para configurar un servidor smtp con autenticación? Mi servidor ya no envía correos si no se loguea al servidor SMTP.
Me gustaMe gusta
una disculpa por la demora, en este caso, no sabriamos decirte porque no nos hemos metido a revisar a detalle el codigo de esta libreria
Me gustaMe gusta
para el problema del $to si falta solamente colocalo despues del $from con la direccion del correo al cual enviaras el email asi:
$to=»abc@gmail.com»
o agregando el correo desde una consulta
Me gustaMe gusta
Buen día, Disculpa estoy viendo el ejemplo pero no falta el $to en el código.
Ok espero su respuesta la otra es como me doy cuenta que llego el correo a su destino existe alguna forma de saberlo?
Saludos
Me gustaMe gusta