PHPMailer收发邮件标题、发件人、内容乱码问题的终极解决方法

发布时间:2020-03-15编辑:脚本学堂
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发送中文邮件时的乱码问题,基本就可以搞定。

附,一个修改好的完整phpmailer发邮件的实例代码:http://file.jb200.com/code/201304/phpmailer_lyb_jb200.com.zip

您可能感兴趣的文章:
PHPMailer发送邮件的实例分享
phpmailer发送gmail邮件的例子
phpmailer发送网易126邮箱的例子
phpmailer发送yahoo邮件的例子
phpmailer类实现邮件群发的实例代码
PHPMailer发送邮件代码实例(ubuntu系统)
PHPMailer发送带附件邮件的例子
PHPmailer发送邮件及乱码问题的解决
PHPMailer发送邮件中文附件名乱码的解决办法
PHPMailer邮件标题中文乱码的解决方法
PHPMailer邮件类发送邮件举例(163邮箱)
phpmailer 发送邮件中文乱码问题的解决方法总结
phpmailer发送邮件及实现密码找回功能的代码
PHPmailer邮件群发的入门例子
PHPmailer 邮件群发的范例参考
phpmailer发邮件中文乱码问题如何解决
phpmailer 类发送邮件乱码解决方法
PHPMailer批量发送邮件的实例代码
有关phpmailer的用法
php使用phpMailer发送邮件的例子
phpmailer实现的简单openvpn用户认证的代码
PHPMailer 中文使用说明
phpmailer发送邮件的例子