最近使用
系统的SMTP发信,不过却遇到了标题乱码的问题。若是以英文 发信,则没有这部分问题,但若标题内含有中文字,那就会出现奇怪的乱 码问题。相信很多刚使用主机内的SMTP,透过服务器发信的使用者应该 都会有这样的问题,那该如何解决乱码问题呢? 这个乱码问题基本上是发生在信件标题,但是信件内容却是正常的。上网 爬了一下文章, 我们只要透过一串语法, 改变标题的编码方式, 透过base64 编码的UTF-8文字,就可以解决这个信件标题乱码问题。
之前有纪录过该如何使用主机的SMTP发信,当然在那之后我就开始尝试 透过主机发出
会员认证信件,不过测试到一半却遇到标题乱码的问题,但 是信件内容是完全正常显示的,当然这问题以前就有遇过了,之前有找过 一串语法可以处理,所以就去把之前写过的东西翻出来,顺便在Google 一下看看到底是什么原因,复习一下。 简单说,以上次的寄信程序代码来看,就是在subject部分加上编码的讯 息,
程序代码变成如下:$subject="=?UTF-8?B?".base64_encode('主旨
')."?=";,我们使用经过base64编码的UTF-8文字,所以就不会有乱 码
问题。那上次那支寄信的程序代码应该会变成以下这样:
如果说发件人部分有设定名称,但是又怕遇到乱码问题,其实可以这样改看看,目前我是如下这样处理乱码的问题,如果有更好的解决方式,欢迎大家提供与补充,谢谢。
$to =" yourmail@kaokaolili “; //收件者
$subject="=?UTF-8?B?".base64_encode(‘主旨‘)."?=";//信件标题,解决乱码问题
$msg = “smtp发信测试“;//信件内容
$from_name="香肠" ; //发件人名称
/* 把$from_name进行编码,解决发件人名称乱码问题 */
$from_name="=?UTF-8?B?".base64_encode($from_name)."?=";
$headers = “From:“.$from_name."
“; //发件人名称和信箱
if(mail(“$to", “$subject", “$msg", “$headers"))
echo “信件已经发送成功。“;//寄信成功就会显示的提示讯息
else
echo “信件发送失败!“;//寄信失败显示的错误讯息
?>
如果有兴趣知道更多信息,可以参考一下官方说明 ,或是这一篇文章「PHP发送UTF-8编码中文邮件标题乱码的解决 」,里面都有更详细的错误解决方式的解释说明与相关的应用。在发件人部分遇到编码问题时,偷偷问了一下小祖 ,他帮我找了「php处理base64编码和Unicode客户端交互的问题 」这篇文章,文章内讲解了编码的问题,看了之后有看没有懂,就当作参考数据在这边注记一下,以后若用到可以参考。