php邮件功能发送UTF 8编码中文邮件时标题乱码的解决方案
最近遇到一个问题,就是使用php的mail功能发送utf-8编码的中文邮件时,标题出现乱码,但邮件正文是正确的。一开始我以为是页面编码的问题,但是发现页面编码utf-8没有问题。找了半天原因,终于找到了问题。
1.使用PEAR的邮件类。
PEAR的邮件类允许您选择sendmail或SMTP发送信件。这个打包的界面非常容易使用,所以你不需要自己重新发明轮子。
2.标题中有关主题的乱码字符。
不要将iso-8859-1编码以外的任何词语直接放入主题中。正确的方法是使主题中的单词符合RFC 2047。假设你的主题中单词的编码是GB2312,正确的主题应该是$ header[' subject ']='='的格式?GB2312?“b,”。base64_encode('标题文本')。=';如果是UTF-8,将上面开头的GB2312替换为UTF-8。标题中推荐使用GB2312编码,因为MTA分化严重,大部分MSP使用自己开发的MTA,但我相信无论如何国内大部分MTA都可以支持GB2312编码。
如果发送到国外的MSP,建议在主题处使用base64编码的UTF-8字符,因为它们可能不支持GB2312编码。
3.请确保在标题中添加内容类型。
电子邮件标题中的内容类型类似于网页,也是文本/纯文本;Charset=gb2312。该选项主要对接收邮件的客户端有意义,可以避免客户端出现乱码字符。一些网络邮件还会根据这里的设置对邮件内容进行编码和转换,以便正确显示。你可以想象当你把它发送到的邮箱时的情形。代码为gb2312的com.tw。
4.正确配置用于发送邮件的主机。
1)必须配置反向解析,因为大部分非固定IP都做不到反向解析,有些反垃圾策略以此为判断依据。2)必须配置MX分析。原因同上。3)确保你的返回路径可以收到被退回的信件,否则你的邮件发送服务器可能会进入接收端的黑名单。
$ subject=strip slashes($ the _ post[' Title ']);$ headers=' MIME-version : 1.0 \ r \ n ';$ headers。='Content-type:文本/纯文本;charset=utf-8 \ r \ n ';$ headers。='内容-传输-编码: 8位\ r \ n ';$ message=strip slashes(strip _ tags($ the _ post[' Content ']));邮件($to,$subject,$message,$ headers首先使用base64 _ encode()函数—使用MIME base64对数据进行编码,并在头字符串之前添加编码类型,例如:=?UTF 8号?b?添加:在标题之后。=示例:
?PHP $ to='[email protected]';//将此电子邮件地址更改为您自己的地址。$ name=$ _ POST[' name '];$ email=$ _ POST[' email '];$subject=“来自博客读者的邮件”;$subject='=?UTF 8号?“b,”. base64_encode($subject)。=';$ headers=' MIME-version : 1.0 \ r \ n ';$ headers。='Content-type:文本/纯文本;charset=utf-8 \ r \ n ';$ headers。='内容-传输-编码: 8位\ r \ n ';$ message=$ _ POST[' message '];邮件($to,$subject,$message,' From: '。$电子邮件。',$ headers);回应“好的”。$name。您的邮件已发送。这样,发送的中文邮件的标题就不会乱码。
很简单吗?事实上,在彻底分析问题后,所有的问题都会很容易解决。希望这篇文章对大家的学习有所帮助。
版权声明:php邮件功能发送UTF 8编码中文邮件时标题乱码的解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。