Postfix搞砸了电子邮件标题!
我已经在雪豹上设置了一个本地开发环境,并且已经设置了postfix来通过我的isp邮件服务器发送邮件。Postfix搞砸了电子邮件标题!
我终于得到了postfix工作后,很多挫折,但现在当我的电子邮件发送标题信息被封杀了!
我用下面的PHP代码:
$email = "[email protected]"; $subject = "Email tester"; $body = "Simple test"; $header = "From: [email protected] \r\n"; $header .= "MIME-VERSION: 1.0\r\n"; $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $phpversion = phpversion(); $header .= "X-Mailer: PHP v$phpversion\r\n"; mail($email,$subject,$body,$header); echo "message sent!";
To:和主题:标题显示为他们应该在标题!但在电子邮件正文其余显示。这使得电子邮件看起来像电子邮件客户端中的从字段是空的。
我已经尝试了各种PHP脚本,一些非常简单,但它是同样的东西,标题始终显示在电子邮件正文中。
我在想这可能是一个后缀问题,但不知道,任何人遇到过这种类型的问题?
在* additional_headers *中使用PHP_EOL而不是\ r \ n,例如在您的示例中为$ header。 PHP_EOL会将换行符替换为您正在运行的操作系统。
另外,消息应该只包含LN,即\ n。这相应于PHP文档。 每行应该用LF(\ n)分隔。行不应超过70个字符。
确保你在你的脚本中符合两个标准 - 我试图实现它,并最终得到它与Postfix的默认配置工作。
我不会使用PHP_EOL,因为RFC 821明确要求行结束符是CRLF。有些邮件服务器会拒绝带有非标准行结尾的消息,例如LN only(iirc qmail does not) – Cedric 2011-05-17 01:01:33
这里我们不谈论RFC,而是PHP和Postfix。PHP明确规定,只有LN应该用在发送给mail()函数的正文消息中。做了进一步的处理 - 可能是它将最终发送到Postfix的消息转换为正确的格式 – 2011-05-18 15:52:13
对于消息正文是,但不是对于头文件摘自PHP文档:“多个额外的头文件应该用CRLF分隔( \ r \ n)。“ – Cedric 2011-05-18 16:36:56
这几乎是100%不是Postfix问题,而是由您的代码引起的问题。标题后看到一个空白的CRLF后,主体就会启动。
你应该倾销你的电子邮件正文文本,看看你是否不小心引入额外的CRLF。
进一步调查这个问题(基本上是因为我不想仅仅为此而改进大量脚本),我已经发现PHP和Postfix开发者之间存在强烈的冲突,这是不固定的到现在。你可以在这里阅读广泛的信息:
http://www.mail-archive.com/[email protected]/msg03226.html
后缀预计停产将LF在UNIX上拿起从Sendmail邮件时和 替换有CRLF发送时。 当它得到CRLF时,它仍然取代了 LF,我们得到CRCRLF。
它解释了破损的标题。为了解决这个问题,你必须知道你的Postfix和PHP /邮件系统是如何工作的。如果您遇到上述问题,请使用“\ n”而不是“\ r \ n”。如果你编写一个可以在Windows/Unix上运行的复杂系统,只需引入一个额外的参数,如$ eeol =“\ r \ n”;而不是直接的“\ r \ n”标签,这种方式可以很容易地配置为任何系统。
我想这是该方法的Postfix笔者建议:
这将是非常好的,如果PHP应用程序开发人员的邮件格式以一致的方式。例如,他们可以使用包含END-OF-LINE终止符的变量,而不是在整个地方对LF或CRLF行终止符进行硬编码。
我试过
行结尾无效:( – 2010-02-09 23:44:02