PHP邮件标头无法正常工作

时间:2014-03-14 06:14:14

标签: php email email-headers

我正在使用PHP mail()函数发送邮件。邮件标题无法正常工作。

$charset = mb_detect_encoding($message);

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From: '.$from . "\r\n";    
$headers .= 'Content-type: text/html; charset='.$charset  . "\r\n"; 
$headers .= 'Reply-To: '.$from . "\r\n";
$headers .= 'X-Mailer: php';

在上面的代码中,解析了唯一的第一行,后面的4行显示在消息体中。 “来自”没有设定。

$charset = mb_detect_encoding($message);

$headers  = 'From: '.$from . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset='.$charset  . "\r\n";
$headers .= 'Reply-To: '.$from . "\r\n";
$headers .= 'X-Mailer: php';

在上面的代码中,“From”和“MIME”行被正确解析,但后面的3行显示在邮件正文中。

GMail正确接收它。

2 个答案:

答案 0 :(得分:2)

您是否尝试仅使用\n代替\r\n

http://php.net/manual/en/function.mail.php

  

注意:

     

如果未收到消息,请尝试仅使用LF(\ n)。一些Unix邮件传输代理(最明显的是»qmail)自动替换CRLF的LF(如果使用CRLF,则会导致CR加倍)。这应该是最后的手段,因为它不符合»RFC 2822.

您可以使用以下代码轻松更改电子邮件中的行尾:

$EEOL = "\n";
$headers  = 'From: '.$from . $EEOL;
$headers .= 'MIME-Version: 1.0' . $EEOL;

答案 1 :(得分:0)

您应该考虑使用电子邮件类库而不是php中的常规mail()函数。 我个人喜欢免费的SwiftMailer因为它的简单性和附件的强大功能等。