PHP发邮件收件箱中主题乱码的解决方法

举报
wh_bn 发表于 2021/12/15 23:09:09 2021/12/15
【摘要】 使用PEAR Mail 发邮件,结果有的邮箱中收到的邮件标题名是乱码 以下是解决方法 $subject1 = "=?GBK?B?".base64_encode($subject)."?="; 参考资料: 前两天发现,PHP程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码。 解决方法如下: 先用函数b...

使用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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。