我知道如何使用mPDF库生成PDF并使用PHPMailer将其作为附件发送 - 如下所示:
...
$emailAttachment = $mpdf->Output('file.pdf', 'S');
$mail = new PHPMailer();
$mail->AddStringAttachment($emailAttachment, 'file.pdf', 'base64', 'application/pdf');
...
但是如果我在单独的PHP文件中生成PDF(不应该修改) - 如下所示 - invoice.php:
...
$mpdf = new mPDF();
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;
如何使用PHPMailer附加此动态创建的PDF文件? 我试过这个:
$mail = new PHPMailer();
...
$mail->addStringAttachment(file_get_contents('invoice.php'), 'invoice.pdf', 'base64', 'application/pdf');
$mail->send();
发送的电子邮件内容正确但PDF附件已损坏,因此无法显示。如何正确编码?我尝试了其他一些方法,但文件已损坏或根本没有附加(在一个案例中,整个电子邮件正文都是空白的。)
提前感谢您的帮助! :)
答案 0 :(得分:5)
问题是您未正确使用file_get_contents
;当你使用它时,它将获取include.php
的内容,而不是它的执行结果。您需要将其扩展为完整的URL,以便以这种方式获取它,尽管我建议不要这样做。让脚本生成PDF文件,然后使用the file output option of mpdf:
$mpdf = new mPDF();
$mpdf->WriteHTML($html);
$mpdf->Output('/path/to/files/doc.pdf', 'F');
然后运行该脚本并从PHPMailer附加结果文件(并在之后删除该文件):
include 'invoice.php';
$mail = new PHPMailer();
...
$mail->addAttachment('/path/to/files/doc.pdf');
$mail->send();
unlink('/path/to/files/doc.pdf');
您可以跳过外部文件方法,使用"返回一个字符串" S
方法的输出模式(Output
)和return
来自包含文件的字符串:
$mpdf = new mPDF();
$mpdf->WriteHTML($html);
return $mpdf->Output('doc.pdf', 'S');
然后:
$pdf = include 'invoice.php';
$mail = new PHPMailer();
...
$mail->addStringAttachment($pdf, 'doc.pdf');
$mail->send();