php mail() headers 阻止发送电子邮件

php mail() headers prevent email from sending

我不会说谎。我不太理解我在 header 中为这个邮件功能使用的一些代码。我一直在尝试自己修复它,一些代码是从其他论坛 posts 等复制的

$email$subject$msg 变量都很好,当我早些时候用这 3 个变量测试它们时,电子邮件正在发送。然后我为 "From" 部分添加了一个 header 并且发件人姓名是固定的(但电子邮件进入了我的垃圾文件夹 - 烦人)。

现在我正在尝试向 $msg 添加一些 html 标签,并按照其他论坛 posts 在我的 $header 变量上使用了最后两行,但这完全阻止了电子邮件的发送。请告诉我如何解决这个问题。

$headers = "From: website <donotreply@website.com>" . PHP_EOL .
"BCC: customer1@hotmail.com" . PHP_EOL . 
"MIME-Version: 1.0 \r\n" . PHP_EOL . 
"Content-Type: text/html; charset=UTF-8' \r\n";

$email = "SomeEmail@hotmail.com";
$subject = "Weekly Newsletter";
mail($email, $subject, $msg, $headers);

感谢我的评论部分提醒我 post 错误。它说:

警告:mail():在第 45

行 /path/publishnewsletter.php 的 additional_header 中发现多个换行符或格式错误的换行符

"MIME-Version: 1.0 \r\n" . PHP_EOL . 换行符太多。根本不要使用 PHP_EOL;使用 \r\n,且仅使用一次。

您在 charset 之后还有一个额外的单引号。

$headers =
    "From: website <donotreply@website.com>\r\n" .
    "BCC: customer1@hotmail.com\r\n" . 
    "MIME-Version: 1.0\r\n" . 
    "Content-Type: text/html; charset=UTF-8";

看看这个可能会有帮助

  • 消毒您的 headers。 additional_headers 参数中没有多个换行符。这些算作 "multiple or malformed newlines":\r\r, \r[=11=], \r\n\r\n, \n\n, \n[=11=].
  • 仅对 headers 使用 additional_headers。电子邮件(多部分或多部分,有 ir 没有附件等)属于 message 参数,而不属于 headers。
  • 并且不要使用 PHP_EOL

PHP 安全错误报告:https://bugs.php.net/bug.php?id=68776
C 代码差异如何固定:http://git.php.net/?p=php-src.git;a=blobdiff;f=ext/standard/mail.c;h=448013a472a3466245e64b1cb37a9d1b0f7c007e;hp=1ebc8fecb7ef4c266a341cdc701f0686d6482242;hb=9d168b863e007c4e15ebe4d2eecabdf8b0582e30;hpb=eee8b6c33fc968ef8c496db8fb54e8c9d9d5a8f9