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 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
yii2实现根据时间搜索的方法
May 25 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
Laravel中的Auth模块详解
Aug 17 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
PHP实现APP微信支付的实例讲解
Feb 10 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的类树(支持无限分类)
2006/10/09 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
python实现数据写入excel表格
2018/03/25 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python插件机制实现详解
2020/05/04 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
建筑文秘专业个人求职信范文
2013/12/28 职场文书
七夕活动策划方案
2014/08/16 职场文书
就业协议书样本
2014/08/20 职场文书
精神病医院见习报告
2014/11/03 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python