Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send FPDF document with PHPMailer;

I am currently trying to generate a pdf with FPDF and then send it in an email with PHPMailer. I know that the PHPMailer functionality is working, and I can create the pdf. But when i try to download the pdf to the server first, output($pdf,"F"), I get the error:

Warning (2): fopen(/temp-file.pdf): failed to open stream: Permission denied [APP/Vendor/fpdf/fpdf.php, line 1025]FPDF error: Unable to create output file: /temp-file.pdf

The pdf creation is very long, so i will just show you me trying to ouptut it.

FPDF

$pdfoutputfile = 'temp-folder/temp-file.pdf';
$pdfdoc = $pdf->Output($pdfoutputfile, 'F');

PHPMailer

$mail = new phpmailer;
                    $mail->SetFrom("[email protected]","Company");
                    $mail->AddAddress($to);
                    $mail->Subject  = "Invoice $id";      
                    $body .= "This is an automatically generated message from Company \n";
                    $mail->Body     = $body;


                    $mail->AddAttachment($pdfoutputfile, 'my-doc.pdf');
                    if(!$mail->Send()) {
                        $this->Session->setFlash("Invoice was not sent");
                        echo 'Mailer error: ' . $mail->ErrorInfo;
                        } else {
                        $this->Session->setFlash("Invoice was sent");
                    }

Does anyone have a solution for me? Thank you!

like image 232
Anthony Avatar asked Aug 26 '15 14:08

Anthony


1 Answers

You just need to fix your permissions. If FPDF can't write the file, then there's nothing for PHPMailer to send, so of course it won't work.

Alternatively you can render to a string and attach that instead - this way it doesn't need to write a file:

$pdfdoc = $pdf->Output('', 'S');
...
$mail->addStringAttachment($pdfdoc, 'my-doc.pdf');
like image 166
Synchro Avatar answered Oct 13 '22 10:10

Synchro