PHP发送UTF-8编码中文邮件标
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
乱码的解决
当我们使用下面的PHP语句发送中文电子邮件的时候,会发现邮件的标题是乱码,而邮件
正文却是正确的,如何才能使得邮件标题不是乱码呢?
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. 对你用来发送邮件的主机进行正确配置
o 一定配置反向解析,因为大部分的非固定 IP 都无法做反向解析,部分反垃
圾邮件策略以此作为判断依据。
o 一定配置 MX 解析,道理同上。
o 确保你的 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);
先用
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
base64_encode() — 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
例如:
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。