Php pear发送的MIME PDF文件附件未打开

Php pear发送的MIME PDF文件附件未打开,php,pdf,pear,mpdf,Php,Pdf,Pear,Mpdf,以下是我的代码,用于使用MPDF动态生成PDF并将其作为附件发送。我已经删除了不必要的代码,以便快速理解 <?php require_once "Mail.php"; require_once "Mail/mime.php"; include 'mpdf/mpdf.php'; $server = 'my-domain-name'; $header = file_get_contents($server.'/pdf-header.php); $html

以下是我的代码,用于使用MPDF动态生成PDF并将其作为附件发送。我已经删除了不必要的代码,以便快速理解

<?php
   require_once "Mail.php";
   require_once "Mail/mime.php";
   include 'mpdf/mpdf.php';
   $server = 'my-domain-name';

   $header = file_get_contents($server.'/pdf-header.php);
   $html = file_get_contents($server.'/pdf-data.php);
   //....Some parameters for mPDF constructor
   $mpdf = new mPDF('en-x','A4','','',$marginLeft, $marginRight, $marginTop, $marginBottom, $marginHeader, $marginFooter);
   // *** Set some properties of $mpdf object
   $mpdf->WriteHTML($html); # Write html to pdf
   $content = $mpdf->Output('', 'S'); // Saving pdf to attach to email 
   $content = chunk_split(base64_encode($content));

   # Set $from, $to, $subject and parameters for SMTP Authentication
   $bodyHTML = '<p>Some HTML Body</p>';
   $bodyTXT = 'Plain Text Body for clients not supporting HTML';

   $headers = array ('From' => $from,   'To' => $to,
                     'Reply-To' => $to, 'Subject' => $subject);
   $smtpParams = array ('host' => $host, 'port' => $port,
                        'auth' => true, 'username' => $emailID,
                        'password' => $password);
   $mime = new Mail_mime("\n");
   $mime->setTXTBody($bodyTXT);
   $mime->setHTMLBody($bodyHTML);
   $mime->addAttachment($content, 'application/pdf', 'report.pdf', false, 'base64', 'attachment');
   # Get Mime Body
   $body = $mime->get();
   # Get Mime Headers
   $mimeHeaders = $mime->headers($headers);

   $smtp = Mail::factory('smtp', $smtpParams);
   $mail = $smtp->send($to, $mimeHeaders, $body);
?>

PDF完美地输出到浏览器,没有任何错误。这意味着我在搞砸我的工作-

$mime->addAttachment($content, 'application/pdf', 'report.pdf', false, 'base64', 'attachment');
StackOverflow上也讨论过类似的问题,但它们都是从存储器中提取文件,然后通过电子邮件发送的。我也试过了,但是PDF还是被破坏了

谁能告诉我我的剧本有什么问题吗


提前感谢

您的代码的问题是您对pdf文件进行了双重编码。调用
chunk\u split
base64\u encode
Mail\u mime
内部工作的一部分,因此您不必这样做。使用
'base64'
参数调用
addAttachment
,只会告诉
Mail\u mime
使用base64对其进行编码,而不是必须这样做

要修复代码,只需删除以下行

$content = chunk_split(base64_encode($content));

我认为,这一行
$content=chunk\u split(base64\u encode($content))是不必要的,因为这是
Mail\u mime
s工作的一部分。调用此函数将以双编码pdf文件结束attachment@Thanks菲利普。成功了。现在我明白为什么这个尺寸看起来很大了。我以为脚本是在放大嵌入的图像。只需将此作为回复发布,以便我可以将其标记为回复。
$mime->addAttachment($content, 'application/pdf', 'report.pdf', false, 'base64', 'attachment');
$content = chunk_split(base64_encode($content));