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


Posted in PHP onOctober 20, 2015

最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。

 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的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

是不是很简单,其实把问题分析透了,所有的问题都会迎刃而解了,希望这篇文章对大家的学习有所帮助。

PHP 相关文章推荐
PHP 变量定义和变量替换的方法
Jul 30 PHP
关于页面优化和伪静态
Oct 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
ThinkPHP实现登录退出功能
Jun 29 PHP
java解析json方法总结
May 16 PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 #PHP
php限制文件下载速度的代码
Oct 20 #PHP
php获取远程文件大小
Oct 20 #PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 #PHP
php生成验证码函数
Oct 20 #PHP
php文件上传你必须知道的几点
Oct 20 #PHP
PHP判断上传文件类型的解决办法
Oct 20 #PHP
You might like
php实现的短网址算法分享
2014/06/20 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
python实现求特征选择的信息增益
2018/12/18 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
python编写实现抽奖器
2020/09/10 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
《匆匆》教学反思
2014/02/22 职场文书
化工见习报告范文
2014/10/31 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
MySQL 数据表操作
2022/05/04 MySQL