• 技术文章 >后端开发 >PHP问题

    php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?

    coldplay.xixicoldplay.xixi2020-07-27 09:16:07原创786

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:1、将subject里头的文字符合RFC 2047的规范;2、在headers中添加【content-type】;3、对用来发送邮件的主机进行正确配置。

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:

    1.使用 PEAR 的 Mail 类

    PEAR 的 Mail 类可以让你选择使用 sendmail 或者 SMTP 方式发信,这样的包装好的接口很好用,你没有必要去自己重新发明轮子。

    2.关于headers 中subject 的乱码

    不要把任何除了iso-8859-1编码之外的文字直接放进subject,正确的方式是让subject 里头的文字符合RFC 2047的规范,假设你的subject 处的文字的编码是GB2312,那么正确的subject 应该是这样的格式

    $headers['subject'] = '=?GB2312?B?' . base64_encode('标题文字') . '?=';

    如果是UTF-8 的话,把上面开头的GB2312 替换成UTF-8 即可。推荐在标题处使用GB2312 编码,因为MTA 的分化实在是严重,大部分的MSP使用的都是自己开发的 MTA,而相信国内的大部分 MTA 无论如何都是可以支持 GB2312 编码的。

    而如果是发送到国外的MSP,则推荐你在subject 处使用经过base64 编码的 UTF-8 文字,因为他们很可能不支持 GB2312 编码。

    3.一定在headers 中添加content-type

    电子邮件的 headers 中的 content-type 处类似网页的,也是 text/plain; charset=gb2312 这样的格式。这个选项主要对收邮件的客户端有意义,可以避免在客户端出现乱码,部分的 Webmail 也会根据这里的设置对邮件的内容进行编码转换以正确显示。你可以设想一下你用 gb2312 编码发到 .com.tw 的邮箱时候的情况。

    4.对你用来发送邮件的主机进行正确配置

    1)一定配置反向解析,因为大部分的非固定 IP 都无法做反向解析,部分反垃圾邮件策略以此作为判断依据。

    2)一定配置 MX 解析,道理同上。

    3)确保你的 return path 是能够收到退信的,否则你的邮件发送服务器可能会进入接收端的黑名单。

    $subject = stripslashes($the_post['Title']); 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/plain; charset=utf-8\r\n"; 
    $headers .= "Content-Transfer-Encoding: 8bit\r\n"; 
    $message = stripslashes(strip_tags($the_post['Content'])); 
    mail($to, $subject, $message, $headers);

    先用函数base64_encode()— 使用MIME base64 对数据进行编码

    标题字符串前加编码类型例如: =?UTF-8?B?

    标题字符串后加:?=

    例如:

    <?php  
     $to = "clairelume@qq.com"; //将此电子邮件地址改为自己的。  
     $name = $_POST['name'];  
     $email = $_POST['email'];  
     $subject = "来自博客读者的邮件";  
     $subject = "=?UTF-8?B?".base64_encode($subject)."?=";  
     $headers = "MIME-Version: 1.0\r\n";  
     $headers .= "Content-type: text/plain; charset=utf-8\r\n";  
     $headers .= "Content-Transfer-Encoding: 8bit\r\n";  
     $message = $_POST['message'];  
     mail($to,$subject,$message,"From: ".$email."",$headers);  
     echo 'OK '.$name.', 您的邮件已发送。';  
    ?>

    这样,发送的中文邮件标题就不是乱码了。

    相关学习推荐:PHP编程从入门到精通

    以上就是php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php mail 乱码
    上一篇:php如何替换换行符 下一篇:星外php自动安装是指什么

    相关文章推荐

    • PHP正则表达式验证Email的方法• php如何发送电子邮件?PHP mail()函数实现发送邮件• java mail发送邮件出现乱码• php输出汉字出现乱码怎么解决

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网