Php 使用TCPDF动态生成PDF

Php 使用TCPDF动态生成PDF,php,pdf-generation,tcpdf,Php,Pdf Generation,Tcpdf,我正在使用TCPDF库动态生成PDF账单,并通过电子邮件发送。这一切都是可行的,但我有一个奇怪的问题。当我将电子邮件发送到gmail帐户时,一切正常,但当我将其发送到邮件服务器时,我会收到带有pdf的电子邮件,但当我打开它时,它不会打开,我会收到一条消息Adobe reader无法打开file.pdf,因为它不是受支持的格式或文件已损坏。电子邮件中的pdf是空白的 我将PDF保存为如下字符串: $attachment = $pdf->Output("mypdf.pdf","E"); $at

我正在使用TCPDF库动态生成PDF账单,并通过电子邮件发送。这一切都是可行的,但我有一个奇怪的问题。当我将电子邮件发送到gmail帐户时,一切正常,但当我将其发送到邮件服务器时,我会收到带有pdf的电子邮件,但当我打开它时,它不会打开,我会收到一条消息Adobe reader无法打开file.pdf,因为它不是受支持的格式或文件已损坏。电子邮件中的pdf是空白的

我将PDF保存为如下字符串:

$attachment = $pdf->Output("mypdf.pdf","E");
$attachment = chunk_split($attachment);
并通过电子邮件发送,如下所示:

 $header .= "--".$separator.$eol; 
 $header .= "Content-Type: application/pdf; name='mypdf.pdf'".$eol;
 $header .= "Content-Transfer-Encoding: base64".$eol;
 $header .= "Content-Disposition= attachment".$eol.$eol;
 $header .= $attachment;
我用php邮件功能发送电子邮件

有趣的是,如果我强制下载pdf,就像这样:

$attachment=$pdf->Outputmypdf.pdf,D

文件正常,打开时没有问题!但是如果我把它改回E,它就不起作用了

另一件奇怪的事情是,有时我可以毫无问题地打开邮件服务器上的pdf文件,但下一次即使我发送完全相同的电子邮件,它也无法工作


有人知道发生了什么事吗?我希望避免将pdf保存在本地服务器上。

为什么避免保存pdf文件?您可以使用F参数保存它。邮件发送后,您可以使用取消链接功能将其删除

我看到一些小瑕疵:

内容处置=应为内容处置: 您应该使用-.$分隔符结束附件-
我不确定这是否能解决你的问题。无论如何,我认为手动创建所有的头文件是相当复杂的。多年来,我一直使用PEARs Mail_Mime来完成这项任务,您会发现许多简单易用的解决方案。

您是否对$attachement进行了编码?$pdf->Outputmypdf.pdf,E;返回base64编码的字符串。我自己也尝试过对它进行编码,但没有成功。如果要删除它,我看不出写文件的意义。我用这个选项作为最后手段。我以前也对你做过同样的事情。我检查了$mail->send==true{unlinkfile path;}是否有效。我使用创建文件来执行此操作,因为它更容易附加。