2013-10-12 51 views
0

下面的代碼在發送到GMAIL,YAHOO,HOTMAIL時保留郵件格式,但在通過Outlook或Mozilla Thunderbird訪問時顯示空郵件時則保留相反的格式。PHP郵件程序如何保存文本格式

我試過N2blr但它給出了正確的結果。

有什麼想法?

$fp = fopen($attachment_temp, "rb"); 
$file = fread($fp, $attachment_size); 

$file = chunk_split(base64_encode($file)); 
$num = md5(time()); 

//Normal headers 

$headers = "From: ".$namefrom."<".$mailhost.">\r\n"; 
$headers .="Reply-To: ".$emailfrom."\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: multipart/mixed; "; 
$headers .= "boundary=".$num."\r\n"; 
$headers .= "--$num\r\n"; 

// This two steps to help avoid spam 

$headers .= "Message-ID: <".gettimeofday()." [email protected]".$_SERVER['SERVER_NAME'].">\r\n"; 
$headers .= "X-Mailer: PHP v".phpversion()."\r\n"; 

// With message 

$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n"; 
$headers .= "Content-Transfer-Encoding: 8bit\r\n"; 
$headers .= "".$message."\n"; 
$headers .= "--".$num."\n"; 

// Attachment headers 


$headers .= "Content-Type:".$attachment_type." "; 
$headers .= "name=\"".$attachment_name."\"r\n"; 
$headers .= "Content-Transfer-Encoding: base64\r\n"; 
$headers .= "Content-Disposition: attachment; "; 
$headers .= "filename=\"".$attachment_name."\"\r\n\n"; 
$headers .= "".$file."\r\n"; 
$headers .= "--".$num."--"; 

回答

0

在我看來,這裏有一個錯誤:

$標題= 「內容類型:text/html的;字符集= ISO-8859-1 \ r \ n」。 $ headers。=「Content-Transfer-Encoding:8bit \ r \ n」; $ headers。=「」。$ message。「\ n」; $ headers。=「 - 」。$ num。「\ n」;

第三行應該讀取

$標題= 「\ r \ n」 個$消息 「\ n」 個。;

即使某些服務器能夠從這種錯誤中恢復。另外,您可能希望從ISO-8859-1轉換爲UTF-8,以獲得更完整的國際化支持。

+0

是的在看到您的評論和RDs後,似乎ISO已經提出了問題。它適用於此: $ headers。=「Content-type:text/html; charset = utf-8 \ r \ n \ r \ n」; $ headers。=「」.nl2br($ message)。「\ n」; $ headers。=「 - 」。$ num。「\ n」; –

+0

這應該工作。缺少'\ r \ n'會阻止一些讀者意識到標題已經完成並且消息已經開始,從而使得它們不顯示消息正文的一部分(或全部)。 '$ headers'真的有點用詞不當。 – LSerni

+0

感謝您的時間。 –