无法在邮件中打开使用mpdf创建的pdf文件

时间:2018-04-11 15:13:01

标签: php html html5 pdf mpdf

我正在尝试使用mpdf创建一个pdf文档,在第一步中我尝试将其保存在我的下载文件夹中然后我尝试打开它并且它工作得很好。我可以在pdf文档中看到我需要的内容。

在下一步中,我尝试将pdf作为附件发送,并且电子邮件已成功发送到pdf附件,但当我尝试从邮件中打开它时,它返回一个错误,因为“Adobe无法打开pdf文档因为它既不是受支持的文件类型,也不是文件损坏.......“。

我在stackoverflow中搜索了不同的问题,我也尝试了他们有价值的答案,但没有一个能帮助我。

以下是同样的问题,但那里发布的答案也没有帮助我。

Stackoverflow questions related to my post

Few Links Which I followed

这是我的代码:

 $mpdf=new mPDF( ); 
 $mpdf->SetDisplayMode('fullpage');
 $mpdf->list_indent_first_level = 0;    
 $mpdf->WriteHTML($html,2);

 ob_clean(); // **Tried this from Stackoverflow answers**

 $mpdf->Output($filename.'.pdf', 'I'); 

 $mailto   = $row['Email1'].",".$row['Email5'];
 $path  =  'C:\\Users\\Downloads\\';
 $file  = $path."/".$filename;

 $subject   = 'Test Email';
 $message   = 'Test <br> Case';

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

 $separator = md5(time());

 $eol = PHP_EOL;

 $headers = "From: John <john.xxxxx@gmail.com>".$eol;
 $headers .= "MIME-Version: 1.0".$eol;
 $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"".$eol.$eol;         

 // message
 $body .= "Content-Transfer-Encoding: 7bit".$eol;
 $body .= "This is a MIME encoded message.".$eol;
 $body = "--" . $separator.$eol;
 $body .= "Content-Type: text/html; charset=\"UTF-8\"".$eol;
 $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
 $body .= $message.$eol;

 // attachment
 $body .= "--" . $separator.$eol;
 $body .= "Content-Type: application/octet-stream; name=\"" . $filename . '.pdf' . "\"".$eol;
 $body .= "Content-Transfer-Encoding: base64".$eol;
 $body .= "Content-Disposition: attachment".$eol.$eol ;
 $body .= $content.$eol;
 $body .= "--" . $separator . "--";

 //SEND Mail
 if (mail($mailto, $subject, $body, $headers)) {
 //echo "mail send ... OK"; // or use booleans here
 } 

1 个答案:

答案 0 :(得分:1)

您是否尝试更改为附件设置的mime类型? pdf文件的标准mime类型是:

application/pdf

我注意到您正在尝试从本地文件系统加载文件。脚本是否在同一台机器上运行?或者在网络服务器上?

  • 如果它在网络服务器上运行,您可能需要先将文件上传到网络服务器。上传后,您需要更改$path$file个变量。

    $path  =  'www/images/[some-path]';
    $file  = '/'.$filename;
    
  • 如果它在与文件所在的机器相同的机器上运行,则可能需要更新$file变量,以便它使用反斜杠\而不是正斜杠。

    $path  =  'C:\\Users\\Downloads\\';
    $file  = $path.'\\'.$filename;
    

脚本中的另一个error:您永远不会将mpdf内容设置为电子邮件附件的内容。尝试类似:

$content = chunk_split(base64_encode($mpdf->Output($filename.'.pdf', 'I')));

您必须检查mpdf的I函数中的Output()是否适合此用途。我不确定。

修改

// First save it to the server somewhere 
$mpdf->Output($filename.'.pdf', 'F'); // Make sure the path is valid and writing permissions are set correctly to prevent writing errors.

// Then get the contents from the PDF
$content = chunk_split(base64_encode($mpdf->Output($filename.'.pdf', 'S')));