使用mPDF和PHPmailer动态附加PDF

使用mPDF和PHPmailer动态附加PDF,php,phpmailer,mpdf,Php,Phpmailer,Mpdf,我使用mPDF在点击按钮时生成PDF。我正在寻找一种方法来添加PDF的附件使用phpMail。以下是我尝试过的: $mpdf = new mPDF(); $mpdf->WriteHTML($output); $emailAttachment = $mpdf->Output('filename.pdf','S'); $emailAttachment = chunk_split(base64_encode($emailAttachment)); require_once('/

我使用mPDF在点击按钮时生成PDF。我正在寻找一种方法来添加PDF的附件使用phpMail。以下是我尝试过的:

$mpdf = new mPDF(); 
$mpdf->WriteHTML($output);
$emailAttachment = $mpdf->Output('filename.pdf','S');
$emailAttachment = chunk_split(base64_encode($emailAttachment));    

require_once('/inc/user_controller.php');
require_once('/inc/PHPMailer/class.phpmailer.php');
$user = new user();
$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

    $currentUserInfo = $user->userDetails($userId);

    try {
      $mail->AddAddress($currentUserInfo['emailAddress'], $currentUserInfo['firstName']);
      $mail->SetFrom('name@yourdomain.com', 'First Last');
      $mail->AddReplyTo('name@yourdomain.com', 'First Last');
      $mail->Subject = 'Your file is attached';
      $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
      $mail->MsgHTML("This is a test");
      $mail->AddAttachment($emailAttachment);      // attachment
      $mail->Send();
      echo "Message Sent OK</p>\n";
    } catch (phpmailerException $e) {
      echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
      echo $e->getMessage(); //Boring error messages from anything else!
    }
$mpdf=新的mpdf();
$mpdf->WriteHTML($output);
$emailAttachment=$mpdf->Output('filename.pdf','S');
$emailAttachment=chunk_split(base64_encode($emailAttachment));
需要_once('/inc/user_controller.php');
需要一次('/inc/PHPMailer/class.PHPMailer.php');
$user=新用户();
$mail=新的PHPMailer(true)//默认使用php“mail()”;true参数意味着它将在错误上抛出异常,这是我们需要捕获的
$currentUserInfo=$user->userDetails($userId);
试一试{
$mail->AddAddress($currentUserInfo['emailAddress'],$currentUserInfo['firstName']);
$mail->SetFrom('name@yourdomain.com","最后一次",;
$mail->AddReplyTo('name@yourdomain.com","最后一次",;
$mail->Subject='您的文件已附加';
$mail->AltBody='要查看邮件,请使用与HTML兼容的电子邮件查看器!';//可选-MsgHTML将自动创建备用电子邮件查看器
$mail->MsgHTML(“这是一个测试”);
$mail->AddAttachment($emailAttachment);//附件
$mail->Send();
回显“消息发送正常”

\n; }捕获(phpmailerException$e){ echo$e->errorMessage();//来自PHPMailer的漂亮错误消息 }捕获(例外$e){ echo$e->getMessage();//来自其他任何内容的无聊错误消息! }
我得到这个错误“无法访问文件:”然后是一堆垃圾,我认为这些垃圾来自
base64\u encode
。理想情况下,PDF可以显示或下载,也可以通过电子邮件发送,而无需在我的服务器上保存副本。我可以接受正在创建的临时文件,但还没有尝试过


我已经测试了电子邮件功能,它在不添加附件的情况下工作,因此我知道问题在于mPDF和正确地附加它

使用mpdf的选项时,文件将作为字符串返回,而文件名参数将被忽略

但是,phpmailer的addAttachment函数将文件路径作为其第一个参数,而不是将文件作为字符串,请注意您看到的错误

您应该看看另一个名为AddStringAttachment的phpmailer函数:

AddStringAttachment($string,$filename,$encoding,$type)


我正在寻找一个空白邮件PDF MPDF创建的解决方案。你能找到一个可以让你成功发送的修复程序吗?如果你使用Swiftmailer,这可能会很有用:你为我节省了很多寻找解决方案的时间,谢谢!最好接受对你有用的答案,以便恰当地结束问题。