IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

解决PHPMailer邮件标题中文乱码

Codyy技术团队 2009-10-14 13:32:03 累计浏览 3,660 次
本机暂存

    PHPMailer是PHP语言的优秀的邮件发送包。支持 SMTP,CC,BCC,Sendmail 等多种发送方式。

    下面是一个基于 PHPMailer 的发送函数,旧代码了:

    function smtp_main_send( $to, $subject, $message, $from, $fromName )

    {

    $mail = new PHPMailer();

    $mail->CharSet = “UTF-8″; // 设置编码

    $mail->IsSMTP(); // 设置使用SMTP服务发送

    $mail->Host = “smtp.mail.com”;

    $mail->Username = “user”;

    $mail->Password = “pass”;

    $mail->SMTPAuth = true;

    $mail->From = $from;

    $mail->FromName = $fromName;

    if ( is_array( $to ) ) {

    foreach ( $to as $address ) {

    $mail->AddAddress( $address );

    }

    } else {

    $mail->AddAddress( $to );

    }

    $mail->Subject = $subject;

    $mail->Body = $message;

    $mail->AltBody = $message;

    $mail->IsHTML( true );

    return $mail->Send();

    }

    直接这样发送邮件,英文没有问题,但在发送中文的时候标题会有乱码。需要对 class.phpmailer.php 做一些修改:

    修改1,1137 行:

    function EncodeHeader ($str, $position = ‘text’) {

    将函数增加一个参数:

    function EncodeHeader ($str, $position = ‘text’, $pl = 0) {

    if ( $pl ) return “=?” . $this->CharSet . “?B?” . base64_encode($str) . “?=”;

    修改2,796 行:

    $result .= $this->HeaderLine(”Subject”, $this->EncodeHeader(trim($this->Subject)));

    将调用改为:

    $result .= $this->HeaderLine(”Subject”, $this->EncodeHeader(trim($this->Subject),’text’, 1));

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,898)
  2. 字符编码和中文乱码小叙 (累计阅读 7,119)
  3. 比较完美地解决了 vim 编辑中文的问题 (累计阅读 6,824)
  4. 获取指定(访客)IP的所有信息,地址、邮政编码、国家、经纬度等的API (累计阅读 6,461)
  5. 中文编码杂谈 (累计阅读 6,378)
  6. Hadoop的map/reduce作业输入非UTF-8编码数据的处理原理 (累计阅读 5,647)
  7. html页面里的幽灵空行――UTF8Bom (累计阅读 5,492)
  8. UTF-8编码中BOM的检测与删除 (累计阅读 5,254)
  9. Unicode与字符汉字相互转换 (累计阅读 5,244)
  10. python-django的中文编码总结 (累计阅读 5,105)