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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值