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
我不会说谎。我不太理解我在 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