IT技术博客大学习 共学习 共进步

解决PHPMailer邮件标题中文乱码

Codyy技术团队 2009-10-14 13:32:03 浏览 3,545 次

    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. windows下压缩包在linux解压乱码的解决办法 (阅读 5,305)
  2. Linux screen窗口中文乱码问题 (阅读 5,286)
  3. 一款不错的php邮件发送程序 (阅读 4,846)
  4. linux下vim的编译以及终端乱码的最终解决方案 (阅读 4,743)
  5. java中文乱码解决之道(六)—–javaWeb中的编码解码 (阅读 4,144)
  6. java中文乱码解决之道(一)—–认识字符集 (阅读 3,643)
  7. PHP截取汉字出现乱码的解决方法 (阅读 3,627)
  8. 让phpmailer支持中文名称的附件和邮件标题中文乱码 (阅读 3,482)
  9. 如何在PHP下载文件名中解决乱码 (阅读 3,464)
  10. Smarty截取中文乱码的解决办法 (阅读 3,325)