2011-11-09 105 views
7

ya he intentado varias soluciones, el más cercano (para mí) debería tener este aspecto:¿Cómo enviar pdf generado por TCPDF como archivo adjunto SwiftMailer

$file = $pdf->Output('', 'E'); 
$message->attach(Swift_Attachment::newInstance($file, 'name.pdf', 'application/pdf')); 

$pdf es una instancia de TCPDF y $message es una instancia de Swift_Message . Usando el mensaje de correo electrónico que se envía correctamente, el archivo está adjunto, pero cuando intento abrirlo aparece el mensaje de error de que el archivo está dañado o mal codificado.

Mi pregunta es: cómo enviar pdf generado por TCPDF como archivo adjunto Swiftmailer sin guardar el archivo en el servidor y eliminarlo después de enviar el correo electrónico. Here es el enlace a la documentación del método de salida TCPDF, tal vez alguien puede ver algo que me he perdido.

Respuesta

0

¿Has probado esto?

$file = $pdf->Output('', 'S'); 

que esté haciendo esto con otro backend electrónico en PHP, y esto funciona. Supongo que el servidor de correo se encarga de codificar el archivo adjunto, por lo que no hay necesidad de codificarlo como base64 manualmente.

+0

Ya lo intenté, intenté de nuevo y todavía no funciona (mismo mensaje de error) – matino

+0

Si guarda el archivo en el sistema de archivos, ¿puede abrirlo? Si es así, entonces es un error de swiftmailer. Entonces al menos sabes dónde buscar más. – Markus

+0

Si guardo el archivo y lo adjunto con $ mensaje-> adjuntar (Swift_Attachment :: fromPath ($ path)); entonces todo está bien – matino

4

No he tenido problemas para conectar TCPDF sobre la marcha.

que llamar a una función que finalmente devuelve el PDF utilizando el tipo de salida 'S':

return $pdf->Output('TE_Invoice.pdf', 'S');

que adjuntar el archivo con:

$message->attach(Swift_Attachment::newInstance() 
    ->setFilename('TE_Invoice.pdf') 
    ->setContentType('application/pdf') 
    ->setBody($val['file'])); 

Dónde $val['file'] es el valor devuelto por encima.

estoy usando la versión TCPDF: 5.9.134 y Swift Mailer Versión: 4.1.3

+0

Así es como traté de hacerlo pero después de abrir el pdf en el correo electrónico recibo el mensaje de error de que el archivo está dañado o mal codificado ... – matino

8

estoy usando algo como esto y está trabajando. Para el contenido PDF, estoy usando uno de los ejemplos más simples en la biblioteca PDF.

[...] 
$pdf_as_string = $pdf->Output('', 'S'); // $pdf is a TCPDF instance 
[...] 
$transport = Swift_MailTransport::newInstance(); // using php mail function 
$message->setTo(array(
    "[email protected]" => "Main Email", 
    "[email protected]" => "Secondary Email" 
)); 
$message->setSubject("This email is sent using Swift Mailer"); 
$message->setBody("You're our best client ever."); 
$message->setFrom("[email protected]", "Developers United"); 
$attachment = Swift_Attachment::newInstance($pdf_as_string, 'my-file.pdf', 'application/pdf'); 
$message->attach($attachment); 
[...] 

Quizás esta respuesta llega un poco tarde ya que yo estoy usando v4_3_0 SwiftMailer y v6_0_002 TCPDF. Pero por si acaso, vale la pena para alguien.

+0

esto ayudó, gracias. – afinom

+0

Esto también funcionó para MPDF. Muchas gracias. Aquí hay una referencia: http://stackoverflow.com/a/34785821/386579 –

Cuestiones relacionadas