我正在使用PHP邮件功能发送电子邮件。我的标题如下:
<?php
$headers = "MIME-Version: 1.0\r\n"
."Content-Type: text/plain; charset=utf-8\r\n"
."Content-Transfer-Encoding: 8bit\r\n"
."From: =?UTF-8?B?". base64_encode($from_name)
."?= <$from_address>\r\n"
."X-Mailer: PHP/". phpversion();
mail($to, $subject, $body, $headers, "-f $from_address");
?>
此代码来自可接受的stackoverflow答案:https://stackoverflow.com/a/2801159/835950
垃圾邮件刺客因以下原因应用0.1罚款:
0.1 FROM_EXCESS_BASE64来自:不必要的base64编码
我应该如何修改标题以避免这种惩罚。我只是删除base64_encode函数吗?
答案 0 :(得分:1)
您需要检测是否确实需要base64编码的UTF-8,或者是否所有字符都在ASCII范围内。这有点难看,但有效:
<?php
$headers = "MIME-Version: 1.0\r\n"
."Content-Type: text/plain; charset=utf-8\r\n"
."Content-Transfer-Encoding: 8bit\r\n"
."From: ".(preg_match('/[^\x20-\x7f]/', $from_name)?
"=?UTF-8?B?". base64_encode($from_name) ."?=" : $from_name )
." <$from_address>\r\n"
."X-Mailer: PHP/". phpversion();
mail($to, $subject, $body, $headers, "-f $from_address");
?>
或者,您可以使用mb_check_encoding检测字符集,但此正则表达式会使其缩短。
答案 1 :(得分:0)
我在$ from_names上遇到了同样的问题,该问题以UTF-8的形式存储在MySQL数据库中。当像这样的解决方案不需要base64编码时,我可以避免0.01的惩罚:
<?php
function encode_from($s) {
if (mb_check_encoding($s, 'ASCII'))
return mb_convert_encoding($s, 'ASCII', 'UTF-8');
else
return "=?utf-8?b?".base64_encode($s)."?=";
}
$headers = "MIME-Version: 1.0\r\n"
."Content-Type: text/plain; charset=utf-8\r\n"
."Content-Transfer-Encoding: 8bit\r\n"
."From: " . encode_from($from_name)
." <$from_address>\r\n"
."X-Mailer: PHP/". phpversion();
mail($to, $subject, $body, $headers, "-f $from_address");
?>
当确实需要UTF-8编码时,垃圾邮件刺客仍然会受到惩罚,但这是垃圾邮件刺客中的一个错误,该错误已在上游修复:
答案 2 :(得分:-1)