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 引用是个坏习惯
Mar 12 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
php递归遍历多维数组的方法
Apr 18 PHP
js代码实现微博导航栏
Jul 30 PHP
php提交post数组参数实例分析
Dec 17 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
php之可变变量的实例详解
Sep 12 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 PHP
PDO::setAttribute讲解
Jan 29 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
jquery操作select option 的代码小结
2011/06/21 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python妙用之编码的转换详解
2017/04/21 Python
Python中Threading用法详解
2017/12/27 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
详解python itertools功能
2020/02/07 Python
Python中os模块功能与用法详解
2020/02/26 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
两只小狮子教学反思
2014/02/05 职场文书
五心教育心得体会
2014/09/04 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书