2012-02-08 62 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

相關問題