当邮件头中有 \n 字符时,php 中的 Mail() 不会发送

当邮件头中有 \n 字符时,php 中的 Mail() 不会发送

我有一些类似这样的脚本可以发送电子邮件:

$content = "<html><head><title>xxxxx</title></head><body>blabla</body></html>";
        $headers ='From: "'.$email_auteur.'"<'.$email_auteur.'>'."\n";
        $headers .='Reply-To: '.$email_auteur.''."\n";
        $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
        $headers .='Content-Transfer-Encoding: 8bit';
        mail("[email protected]", "Subject", $content, $headers);

所有类似这样的脚本都运行良好。但我更换了服务器(相同的操作系统(Debian)),现在这些脚本不再起作用。我注意到,如果我删除此行末尾的 \n:

$headers .='Reply-To: '.$email_auteur.''."\n";

可以!...但是我在服务器上运行了大量此脚本,因此纠正它们太麻烦了。请问我在哪里可以找到一些可以接受此字符的配置?

答案1

正如在 php 文档中看到的https://www.php.net/manual/en/function.mail.php,您应该使用 \r\n 而不是 \n 来分隔标题(除非使用对其进行双重编码的错误邮件传输代理)。

根据https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6864您被标记为垃圾邮件,因为标题中"和之间没有空格。<From

您应该在发件人标题中添加一个空格,这足以摆脱垃圾邮件分数。

从:

$headers ='发件人:“'.$email_auteur.'”<'.$email_auteur.'>'。”\n";

到:

$headers ='发件人:“'.$email_auteur.'”<'.$email_auteur.'>'。"\n";

实际上,您不应该使用电子邮件地址作为显示名称,因此如果您没有任何相关内容可用作显示名称,则只需使用:

$headers ='发件人:'.$email_auteur."\n";

相关内容