PHPMailer - 发送 PHP 生成的 PDF (mPDF) 作为附件
PHPMailer - send PHP generated PDF (mPDF) as attachment
我知道如何使用 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 附件已损坏,因此无法显示。如何正确编码?我尝试了其他几种方法,但文件已损坏或根本没有附加(在一种情况下,整个电子邮件正文都是空白的)。
提前感谢您的帮助! :)
问题是您使用 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');
您可以使用 Output
方法的 "return a string" 输出模式 (S
) 并从包含的文件中 return
ing 字符串来跳过外部文件方法:
$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();
我知道如何使用 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 附件已损坏,因此无法显示。如何正确编码?我尝试了其他几种方法,但文件已损坏或根本没有附加(在一种情况下,整个电子邮件正文都是空白的)。
提前感谢您的帮助! :)
问题是您使用 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');
您可以使用 Output
方法的 "return a string" 输出模式 (S
) 并从包含的文件中 return
ing 字符串来跳过外部文件方法:
$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();