phpmailer是一个很有名气收发邮件类代码。
只有两个文件。
但是因为phpmailer是老外写的,用来发中文的邮件,总是出现乱码。经过从网上上收集的资料,我也是这么解决。
一个一个乱码的问题修复。
第一:修改邮件内容乱码:
class.phpmailer.php 页:
查找:function EncodeHeader ($str, $position = 'text') {
修改成:
function EncodeHeader ($str, $position = 'text', $pl = 0) {
if ( $pl ) return "=?" . $this->CharSet . "?B?" . base64_encode($str) . "?=";
这样就为这个函数多定义的一个参数。
自然要修改所有调用这个函数的地方的参数。
查找:EncodeHeader(
如下类似这样的都要改:
$result .= $this->HeaderLine("Subject", $this->EncodeHeader(trim($this->Subject)));
改成这样:
$result .= $this->HeaderLine("Subject", $this->EncodeHeader(trim($this->Subject),'text', 1));
意思是定义第三个参考为1,好可以调用我们改的函数里的那个判断语句。
改了这里,当然你要记得在调用这个类的时侯,设置CharSet=UTF8啊。这样,这个判断语句才能转UTF8不乱码了。
像我的可以这么写的:
$mail = new PHPMailer();
$mail->CharSet = "utf8";
第二:修复邮件标题乱码
Subject是处理邮件标题,你要找准这个地方了。像我的是这样调用了
$mail = new PHPMailer();
$mail->Subject="某某标题";
那么,像这样的,你要改成这样:
$mail->Subject = "=?utf-8?B?".base64_encode("某某标题")."?=";
也是转码啊。
第三:修复其他地方乱码
基本原理跟第二个修复一样的。
FromName是处理发件人来着。
找到发件人姓名的地方:
我的是这样写的:
$mail = new PHPMailer();
$mail->FromName = "=?utf-8?B?".base64_encode("黄牌网络客户网上留言】")."?=";
搞定这三个地方,应该就不会再有问题了。其他地方还有乱码你自己找找看了。
如果你是一个懒人。那就下载我处理好的这个:
PHPMailer文件吧。