首页 文章

Postfix搞砸了电子邮件 Headers !

提问于
浏览
1

我在雪豹上设置了一个本地开发环境,并设置了postfix以通过我的isp邮件服务器发送电子邮件 .

我终于得到了postfix工作后非常沮丧,但现在当我的电子邮件发送 Headers 信息被束起来!

我正在使用以下php代码:

$email = "me@mydomain";
$subject = "Email tester";
$body = "Simple test";
$header = "From: me@mydomain \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:和Subject: Headers 在 Headers !中显示,但其余部分显示在电子邮件正文中 . 这使得电子邮件看起来像电子邮件客户端中的from字段是空的 .

我已经尝试了各种各样的PHP脚本,有些非常简单,但它的相同之处在于, Headers 始终显示在电子邮件正文中 .

我认为这可能是一个后缀问题,但不确定,以前有人遇到过这类问题吗?

3 回答

  • 3

    在* additional_headers *中使用PHP_EOL而不是\ r \ n,在您的示例中使用$ header . PHP_EOL将相应地替换换行符到您运行的操作系统 .

    此外,消息应仅包含LN,即\ n . 这相当于PHP文档 . 每行应使用LF(\ n)分隔 . 行不应超过70个字符 .

    确保你在脚本中同时满足这两个标准 - 我已经尝试实现它并最终使用Postfix的默认配置 .

  • 3

    这几乎100%不是Postfix问题,而是由您的代码引起的问题 . 一旦在 Headers 后看到空白的CRLF,身体就会开始 .

    您应该转储您的电子邮件正文,看看您是否不小心引入了额外的CRLF .

  • 0

    进一步研究这个问题(主要是因为我不想仅仅因为这个而改进了很多脚本),我发现PHP和Postfix开发人员之间存在很强的冲突,直到现在才解决 . 你可以在这里阅读广泛的信息:

    http://www.mail-archive.com/postfix-users@postfix.org/msg03226.html

    Postfix希望在unix上从sendmail接收邮件时EOL为LF,并在发送时将其替换为CRLF . When it gets CRLF it still replaces the LF and we get CRCRLF .

    它解释了破碎的 Headers . 要解决此问题,您必须确切了解Postfix和PHP /邮件系统的工作原理 . 如果您遇到上述问题,只需使用“\ n”而不是“\ r \ n” . 如果您编写一个可以在Windows / Unix上运行的复杂系统,只需引入一个额外的参数,例如$ eeol =“\ r \ n”;它将被放置而不是直接“\ r \ n”标签,这种方式可以很容易地为任何系统配置 .

    我想这是Postfix作者推荐的方法:

    如果PHP应用程序程序员以一致的方式格式化电子邮件消息,那将是非常好的 . 例如,他们可以使用包含END-OF-LINE终结符的变量,而不是在整个地方硬编码LF或CRLF行终止符 .

相关问题