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

使用PEAR Mail 发邮件,结果有的邮箱中收到的邮件标题名是乱码

以下是解决方法

$subject1   = "=?GBK?B?".base64_encode($subject)."?=";


参考资料:


前两天发现,PHP程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码。
解决方法如下:
先用函数base64_encode() — 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
邮件header说明Content-type — 防止邮件正文也乱码
$to         = '[email protected]'; 
$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 <[email protected]>' . "\r\n"; 
$headers .= 'From: Admin <[email protected]>' . "\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/

你可能感兴趣的:(PHP发邮件收件箱中主题乱码的解决方法)