首页 > 解决方案 > 合并pdf并作为电子邮件发送php

问题描述

我正在尝试将三个 pdf 文件与 PDFMerger 合并,然后使用 PHPmailer 发送合并的 pdf,而不将文件保存到服务器。

这是我的代码:

<?php
require_once '../PHPMailer-master/src/PHPMailer.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

use PDFMerger\PDFMerger;
require_once 'PDFMerger.php';

$email = new PHPMailer();
$pdf = new PDFMerger;

$pdf->addPDF('samplepdfs/one.pdf', 'all');
$pdf->addPDF('samplepdfs/two.pdf', 'all');
$pdf->addPDF('samplepdfs/three.pdf', 'all');

$pdf->merge('string'); // generate the file

$email->SetFrom('kasserer@lst-beboerforening.dk'); //Name is optional
$email->Subject   = 'Message Subject';
$email->Body      = 'text to send!';
$email->AddAddress( 'krestensb@gmail.com' );

$email->addAttachment($pdf);

return $email->Send();

?>

我收到此错误:

[19-Jan-2020 17:11:55 UTC] PHP Warning:  preg_match() expects parameter 2 to be string, object given in /home/lstbeboer/public_html/PHPMailer-master/src/PHPMailer.php on line 1736
[19-Jan-2020 17:11:55 UTC] PHP Fatal error:  Uncaught Error: Class 'PHPMailer\PHPMailer\Exception' not found in /home/lstbeboer/public_html/PHPMailer-master/src/PHPMailer.php:2953
Stack trace:
#0 /home/lstbeboer/public_html/PDFMerger-master/sample.php(38): PHPMailer\PHPMailer\PHPMailer->addAttachment(Object(PDFMerger\PDFMerger))
#1 {main}
  thrown in /home/lstbeboer/public_html/PHPMailer-master/src/PHPMailer.php on line 2953

非常感谢任何帮助!

BR克雷斯顿

标签: phpphpmailer

解决方案


mode 中的merge()方法string应该将二进制 PDF 作为字符串返回,因此您需要获取返回值:

$pdfdata = $pdf->merge('string');

因为这个数据是在一个变量中而不是磁盘上的文件中,你可以通过以下addStringAttachment()方法将它直接传递给 PHPMailer :

$email->addStringAttachment($pdfdata, 'document.pdf');

给它一个文件名就足以让 PHPMailer 自动设置编码和 MIME 类型。


推荐阅读