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 相关文章推荐
global.php
Dec 09 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
php获取参数的几种方法总结
Feb 18 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
PHP实现远程下载文件到本地
May 17 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
第八节--访问方式
2006/11/16 PHP
PHP开发框架总结收藏
2008/04/24 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
脚本收藏iframe
2006/07/21 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
理解javascript异步编程
2016/01/27 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python读取xlsx的方法
2018/12/25 Python
numpy.array 操作使用简单总结
2019/11/08 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
工作分析计划书
2014/04/30 职场文书
岗位说明书标准范本
2014/07/30 职场文书
高中数学教学反思范文
2016/02/18 职场文书