2013-10-12 46 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

感谢您的时间。 –