PHP发邮件收件箱中主题乱码的解决方法
使用PEAR Mail 发邮件,结果有的邮箱中收到的邮件标题名是乱码
以下是解决方法
$subject1 = "=?GBK?B?".base64_encode($subject)."?=";
参考资料:
前两天发现,PHP程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码。
解决方法如下:
先用函数base64_encode() — 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
邮件header说明Content-type — 防止邮件正文也乱码
$to = 'zhoz@example.com';
$subject = "=?UTF-8?B?".base64_encode('邮件标题')."?=";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// Additional headers
$headers .= 'To: zhoz <zhoz@example.com>' . "\r\n";
$headers .= 'From: Admin <admin@example.com>' . "\r\n";
$headers .= 'Reply-To: zhoz <zhoz@example>' . "\r\n";
mail($to, $subject, $message, $headers);
PEAR::Mail_Mime函数发邮件,主题的地方会显示成乱码。
查询了一下,原来是Mail_mime访求的_encodeHeaders方法有bug。据说目前最新的版本1.56已修正。
且在$_build_params数组中增加一個'head_encoding’,将它设置成了'base64',
'head_charset’,设置成'UTF-8′,中/日文等就不会出现乱码了。
$mime = new Mail_mime($crlf);
$body = $mime->get(array(’head_encoding’ => ‘base64′,
’text_encoding’ => ‘8bit’,
’html_charset’ => ‘UTF-8′,
’text_charset’ => ‘UTF-8′,
’head_charset’ => ‘UTF-8′));
使用SGL_Emailer发送邮件也会出现上面的文件,修改lib/SGL/Emailer.php,加上head_encoding=base64就正常了:
$body = $mime->get(array(
‘head_encoding’ => ‘base64′,
‘html_encoding’ => ‘7bit’,
‘html_charset’ => $GLOBALS[’_SGL’][’CHARSET’],
‘text_charset’ => $GLOBALS[’_SGL’][’CHARSET’],
‘head_charset’ => $GLOBALS[’_SGL’][’CHARSET’],
));
参考资料来源:http://blog.163.com/hs_admin_jsjd/blog/static/175159035200921103525503/
文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fengda2870/article/details/8517537
- 点赞
- 收藏
- 关注作者
评论(0)