2012-02-08 64 views
0

我在过去的两年中一直使用FPDF来生成PDF文件。在生成这个文件后,它会通过电子邮件发送给我。我最近在新服务器上安装了完全相同的脚本。由于一个或其他原因,PDF的生成工作,因为我没有得到一个错误信息。我收到的电子邮件消息是连胜文,看起来像:FPDF为电子邮件生成的附件由奇怪的字符组成

--4aca5942d8bd7e7d523d8b2d71c6b1ea-- 或 --d7582bf6769dd1fa2ee8f05cb04cf445--

每个消息都是不同的。

的剥离代码:

require('class.phpmailer.php'); 
require('fpdf.php'); 
define('FPDF_FONTPATH','font/'); 

//Create new PDF 
$pdf=new PDF(); 
$pdf->AliasNbPages(); 
$pdf->company = $business; 

$pdf->SetFont('Arial','',12); 
$pdf->SetAutoPageBreak(false); 
$pdf->AddPage('P'); 

// email stuff 
$tijd = time(); 
$datum = date('j-m-Y', $tijd); 
$bestandsnaam = $usernameinlog."-".$datum; 
$from = "[email protected]".$website; 
$subject = "Voorraad mutatie door ".$usernameinlog; 
$message = "<p>Zie bijlage voor een mutatieoverzicht.</p>"; 

// a random hash will be necessary to send mixed content 
$separator = md5(time()); 

// carriage return type (we use a PHP end of line constant) 
$eol = PHP_EOL; 

// attachment name 
$filename = $bestandsnaam.".pdf"; 

// encode data (puts attachment in proper format) 
$pdfdoc = $pdf->Output("", "S"); 
$attachment = chunk_split(base64_encode($pdfdoc)); 

// main header (multipart mandatory) 
$headers = "From: ".$from.$eol; 
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol; 
$headers .= "This is a MIME encoded message.".$eol.$eol; 


// The actual message 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol; 
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
$headers .= $message.$eol.$eol; 

// Bijlage 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol; 
$headers .= "Content-Disposition: attachment".$eol.$eol; 
$headers .= $attachment.$eol.$eol; 
$headers .= "--".$separator."--"; 


mail($emailemployee, $subject, "", $headers); 

有谁知道什么错误,我失去了在php.ini参数? 再一次:这个相同的代码在不同的服务器上工作,所以我认为一些设置是错误的,或者我忘了安装一些东西。

:-)谢谢,

亚历

+0

它看就像一些哈希值 - 你可以发布一些代码?像PDF生成或电子邮件发送片段。 – maialithar 2012-02-08 15:42:18

+0

我加了上面的代码来澄清! – 2012-02-08 18:08:39

回答

0

$eol = PHP_EOL;可能是如果你的服务器运行的不是Windows产生问题。

在一封电子邮件中的每一行必须结束CRLF,不论OS的,所以你应该硬编码$eol = "\r\n";

有时,服务器和客户端将应付任何CR或LF,但它是非标准的,他们真的不必。


如果之后仍存在问题,请你能消息源添加的问题(为简便起见,也许修剪的base64位为2行)?

+0

消息来源是一段非常长的代码,但它可以在Linux服务器上运行。以及将base64位修剪为2行的含义是什么? Alex – 2012-02-09 16:27:25

+0

@AlexvanRijs源代码很长的主要原因是它包含附件(附件将作为长base64编码字符串出现在电子邮件中),它将有很多行,看起来像“AAAQAgAIAAAALQEAAAEQAwABAAAAAwAAAAIQAwABAAAAAAAAABAQAwAAAAAQAAAABEQCgABAAAA”。为了帮助你,我真的需要看到这个源代码(但我不需要看到所有的附件,所以你可以从源代码中除去任何两条base64行)。您可以在此问题上发布源代码,或将其发布到其他地方并链接到它。 – SimonMayer 2012-02-09 19:03:25

0
mail($emailemployee, $subject, "", $headers); 

你基本上发送空消息的全部内容以某种方式塞到 $头....

尝试把下面$headers .= "Content-Transfer-Encoding: 7bit".$eol;一切都在$体变量,而不是$头,然后用

mail($emailemployee, $subject, $body, $headers); 

(也$eol = "\r\n"取代$eol = PHP_EOL通过SimonMayer的建议)

+0

Gryphius,我之前建议通过将$ eol变量更改为“r \ n”来更新代码。如果我将$ header更改为$ body并将此变量添加到邮件功能中,它根本不会发送电子邮件。另一方面,如果我把它留给$ header并且离开$ eol =“\ r \ n”;我确实收到一条消息,但仍然在一个散列(--41e12eb8038d06a471d8a74519f62fe5--) – 2012-02-09 16:25:19

相关问题