2012-01-17 79 views
1

我使用TCPDF库来即时生成PDF(账单)并通过电子邮件发送。这一切正常,但我有一个奇怪的问题。当我发送电子邮件到Gmail帐户时,一切都很好,但是当我将它发送到我的邮件服务器时,我收到带有PDF的电子邮件,但是当我打开邮件时它不打开,我收到一条消息“Adobe阅读器无法打开file.pdf,因为它不是受支持的格式,或者是因为文件已被损坏。“ (电子邮件中的pdf是空白的)。使用TCPDF即时生成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的下载,像这样:

$附着= $ PDF->输出( “mypdf.pdf”, “d”);

该文件是确定的,并打开没有问题!但是,如果我将其更改回“E”,则不起作用。

另一个奇怪的是,有些时候我可以打开pdf(我在我的邮件服务器上)没有问题,但下次不会工作(即使我发送完全相同的电子邮件)。

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

+0

你编码了你的'$ attachement'吗? – DerVO 2012-01-17 10:22:19

+0

$ pdf->输出(“mypdf.pdf”,“E”);返回一个base64编码的字符串。我也尝试编码它自己,但没有工作。 – blejzz 2012-01-17 10:24:34

回答

0

为什么你避免保存pdf文件?您可以使用"F"参数保存它。邮件已经发送后,您可以用unlink功能删除

+0

如果要删除文件,则不会看到写入文件的要点。我使用这个选项作为最后的手段。 – blejzz 2012-01-17 10:30:03

+0

我以前做过与你同样的事情。我检查是否($ mail-> send()== true){unlink(“文件路径”); } 有用。 – 2012-01-17 10:32:48

+0

我知道它的作品,但我想避免创建一个文件。 – blejzz 2012-01-17 10:34:20

0

我看到一些小瑕疵:

  • Content-Disposition=应该Content-Disposition:
  • 您应该结束与"--".$separator."--"

您的附件我不确定,如果这能解决你的问题。无论如何,我认为手动创建所有头文件相当复杂。多年来,我使用PEAR的Mail_Mime完成这项任务,您将找到许多简单的现成解决方案。

相关问题