php邮件头中的哪个换行符\ r \ n或\ n?

时间:2010-12-11 07:06:02

标签: php email header

我见过很多使用php邮件功能的例子。其中一些使用\ r \ n作为标题的换行符,有些使用\ n。

$headers = "From: Just Me\n"; 
$headers .= "Reply-To:  Just me <$email>\n"; 

VS

$headers = "From: Just Me\r\n";
$headers .= "Reply-To:  Just me <$email>\r\n";

哪一个是正确的?

有时我会遇到使用\ r \ n并且某些电子邮件客户端将部分标题解释为邮件文本(丢失这些标题信息)的情况 - 这是因为\ r \ n是错误的吗?

8 个答案:

答案 0 :(得分:22)

应根据php documentation使用CRLF \r\n。此外,要符合RFC 2822规范行,必须使用回车字符分隔,CR \r 立即,后跟换行符LF \n

由于\r\n是Windows平台的原生,而\n是Unix,因此您可以在Windows上使用PHP_EOL­Docs常量,这是脚本当前平台的相应新行字符跑着。

答案 1 :(得分:11)

以防万一搜索引擎选择这种方式并为其他人节省了我经历过的挫折:这是一个额外的好奇心。

在Linux上的php 5.2x上,我在php mail()中的电子邮件标题上有\ r \ n,升级到php 5.3.3后,格式化和发送神秘失败。删除\ r \ n修复了脚本(在检查了许多其他可能性之后)。

答案 2 :(得分:8)

如上所述,\ r \ n是根据RFC应该使用的内容,但这会破坏多个邮件系统上的标题(f.i.Outlook 2003)。即使\ n不是'正确'的换行符,根据我的经验,它在我到目前为止遇到的所有邮件系统上都能正常工作。因此,我总是只使用\ n。

答案 3 :(得分:3)

RFC正式要求CRLF(\ r \ n),但使用Unix中断(\ n)标题将为您节省很多麻烦。某些邮件服务器(如qmail)将拒绝您的邮件,如果它使用\ r \ n。

来源:经验,经本说明确认:http://www.php.net/function.mail#40204

答案 4 :(得分:2)

我的经历: HTML电子邮件在Web客户端中工作,但在基于MS的桌面客户端(随行人员,Outlook)中有所突破。正在使用\ r \ n。仅删除了MIME-Version上的\ r \ n,现在可以全面运行。

答案 5 :(得分:1)

我遇到了gmail误解\ r \ n标题的问题,但是在我的情况下只是将标题行中断为\ n是不够的,因为在这种情况下,某些版本的Outlook显示电子邮件为空。

https://stackoverflow.com/a/7960957中的解决方案(我选择在ppa上安装postfix 2.9)加上使用\ n现在似乎无处不在。

答案 6 :(得分:1)

我将我的脚本更改为使用 PHP_EOL ,而这似乎有用 - 就像这样:

//Set Content-type header
$headers  = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
//Additional headers
$headers .= "From: $from" . PHP_EOL;
$headers .= "Cc: $cc"   . PHP_EOL;      
$headers .= "Content-type: text/html" . PHP_EOL;
$headers .= "Bcc: $bcc" . PHP_EOL;

NB。请确保我们“而不是”,因为后者似乎不起作用!

答案 7 :(得分:0)

> $mail = new PHPMailer;
 $mail->isSMTP(); 
**$mail->isHTML(true);**

工作后插入此代码

> all html tag <br> <p> in $mail->Body='Hello<br> how are you ?<b>';