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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
PHP中JSON的应用技巧
Oct 10 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
简单实现PHP留言板功能
Dec 21 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
Laravel框架路由管理简单示例
May 07 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 PHP
PHP7创建销毁session的实例方法
Feb 03 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP4实际应用经验篇(1)
2006/10/09 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Python 使用office365邮箱的示例
2020/10/29 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
季度思想汇报
2014/01/01 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
给老婆的保证书
2015/01/16 职场文书
运动会广播稿50字
2015/08/19 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python