1

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

经过一番挫折后,我最终让 postfix 正常工作,但现在当我的电子邮件发送标题信息时,它被搞砸了!

我正在使用以下 php 代码:

$email = "我@我的域名";
$subject = "电子邮件测试员";
$body = "简单测试";
$header = "来自:我@mydomain \r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= '内容类型:文本/html; 字符集=iso-8859-1' 。"\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
邮件($email,$subject,$body,$header);

echo "消息已发送!";

To: 和 Subject: 标头按应有的方式显示在标头中!,但其余部分显示在电子邮件正文中。这使电子邮件看起来像电子邮件客户端中的发件人字段为空。

我尝试了各种 php 脚本,有些非常简单,但都是一样的,标题总是显示在电子邮件正文中。

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

4

3 回答 3

4

在 *additional_headers* 中使用 PHP_EOL 而不是 \r\n,即您的示例中的 $header。PHP_EOL 将根据您正在运行的操作系统替换换行符。

此外,消息应仅包含 LN,即 \n。这与 PHP 文档一致。 每行应该用 LF (\n) 分隔。行不应超过 70 个字符。

确保您在脚本中满足这两个标准 - 我已经尝试实现它,最后让它与 Postfix 的默认配置一起工作。

于 2011-05-16T20:10:47.403 回答
3

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

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

于 2010-02-09T23:44:24.250 回答
0

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

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

Postfix 期望 EOL 在从 unix 上的 sendmail 接收邮件时为 LF,并在发送时将其替换为 CRLF。当它得到 CRLF 时,它仍然会替换 LF 并且我们得到 CRCRLF

它解释了损坏的标题。要解决这个问题,你必须确切地知道你的 Postfix 和 PHP/邮件系统是如何工作的。如果您遇到上述问题,只需使用“\n”而不是“\r\n”。如果你编写一个可以在 Windows/Unix 上运行的复杂系统,只需引入一个额外的参数,如 $eeol="\r\n"; 它将被放置而不是直接的“\r\n”标记,并且可以为任何系统轻松配置这种方式。

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

如果 PHP 应用程序程序员以一致的方式格式化电子邮件消息,那就太好了。例如,他们可以使用包含 END-OF-LINE 终止符的变量,而不是到处硬编码 LF 或 CRLF 行终止符。

于 2011-06-15T15:49:11.357 回答