[PHP]解决寄件者名称与信件标题乱码问题 _快乐生活_天富娱乐怎么注册_手机博猫游戏注册

您现在的位置是:主页 >快乐生活 >[PHP]解决寄件者名称与信件标题乱码问题 主页 快乐生活

[PHP]解决寄件者名称与信件标题乱码问题

快乐生活2020-05-22421人围观

最近使用系统的SMTP发信,不过却遇到了标题乱码的问题。若是以英文发信,则没有这部分问题,但若标题内含有中文字,那就会出现奇怪的乱码问题。相信很多刚使用主机内的SMTP,透过伺服器发信的使用者应该都会有这样的问题,那该如何解决乱码问题呢?

这个乱码问题基本上是发生在信件标题,但是信件内容却是正常的。上网爬了一下文章,我们只要透过一串语法,改变标题的编码方式,透过base64编码的UTF-8文字,就可以解决这个信件标题乱码问题。

之前有纪录过该如何使用主机的SMTP发信,当然在那之后我就开始尝试透过主机发出会员认证信件,不过测试到一半却遇到标题乱码的问题,但是信件内容是完全正常显示的,当然这问题以前就有遇过了,之前有找过一串语法可以处理,所以就去把之前写过的东西翻出来,顺便在Google一下看看到底是什幺原因,複习一下。

简单说,以上次的寄信程式码来看,就是在subject部分加上编码的讯息,程式码变成如下:$subject="=?UTF-8?B?".base64_encode('主旨')."?=";,我们使用经过base64编码的UTF-8文字,所以就不会有乱码问题。那上次那支寄信的程式码应该会变成以下这样:

$to =” yourmail@your.com “; //收件者

$subject=”=?UTF-8?B?”.base64_encode(‘主旨‘).”?=”;//信件标题,解决乱码问题

$msg = “smtp发信测试“;//信件内容

$headers = “From:admin@your.com“; //寄件者

if(mail(“$to”, “$subject”, “$msg”, “$headers”))

echo “信件已经发送成功。“;//寄信成功就会显示的提示讯息

else

echo “信件发送失败!“;//寄信失败显示的错误讯息

?>

如果说寄件者部分有设定名称,但是又怕遇到乱码问题,其实可以这样改看看,目前我是如下这样处理乱码的问题,如果有更好的解决方式,欢迎大家提供与补充,谢谢。

$to =” yourmail@your.com “; //收件者

$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客户端交互的问题」这篇文章,文章内讲解了编码的问题,看了之后有看没有懂,就当作参考资料在这边注记一下,以后若用到可以参考。