失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 如何解决html邮件乱码问题

如何解决html邮件乱码问题

时间:2020-09-16 23:56:30

相关推荐

如何解决html邮件乱码问题

web前端|前端问答

html

web前端-前端问答

点点大战源码,加速器 ubuntu,tomcat 热部署的方式,如何清理爬虫,指定php文件自动运行,cdn seolzw

本文操作环境:windows7系统、HTML5版、Dell G3电脑。

帝国cms笑话网站源码,vscode咋配置node,ubuntu实验小结,tomcat出现警告,sqlite php聊天室,web前端开发第六章框架,使用爬虫访问百度文库,php http 代理,厦门seo排名效果,net交友网站源码,有关蓝天白云的网页模板,404中文模板lzw

如何解决html邮件乱码问题?mail 邮件内容出现随机乱码

网络播放器源码,vscode 函数变量,ubuntu系统ip怎么查,tomcat iis冲突,sqlite 删除重复项,微信公众号插件商城,前端框架笔记软件pdf,梦到嘴里爬虫子,隐藏index.php,seo教程,骑士资源网站,网页层特效,马克斯4 0模板下载,微擎支付页面版权去除,免费设备二维码管理系统源码,asp源程序 办公lzw

问题描述:

将数据(含中文)拼装为html文件格式,发送邮件到指定用户。

利用PHP中的mail函数

//拼装header。指定编码utf-8,解析邮件正文中的中文$headers = "From: xxx@xxx\n";$headers .= "MIME-Version: 1.0\n";$headers .= "Content-type: text/html; charset=utf-8\n";$headers .= "Content-Transfer-Encoding: 8bit\n";//拼装标题 解决中文标题乱码问题$subject = xxx;$subject = "=?UTF-8?B?".base64_encode($subject)."?=";mail($toEmail,$subject,$message,$headers); // 其中$message为邮件内容主题,格式形如"

".$title."

".$message.$table."";

收到邮件正文部分随机出现乱码,非特殊字符,位置随机,发送邮件到mac和windows收到邮件乱码不一样。

windows:随机位置出现? 或!Mac: 数据位置与传入不一致,比如,应为 xxxxAxxxxBxxxxx,收到的邮件为 xxxxBxxxxAxxxx

传入数据不一样时,有时会出现乱码,有时不会出现,对比与特殊字符也无关。

windows 乱码形如:

排查:

1. 确认是否拼装错误

直接在mail函数前一行打印message内容,完整html格式,保存为html文件后打开。无乱码,与预期所需吻合。

2. 确认收到邮件内容

outlook查看邮件源文件(Mac可直接右击,windows无此功能,后是保存为html文件后查看),发现乱码处格式与步骤一中不一致。比如,标签出现

3. 其他

其实到这一步就一直在怀疑php 的mail函数里究竟做了什么,是不是隐藏的PHP底层bug,传输过程改动了什么。却没有找到对应源码查看,此处徘徊很久。

又因为是中文乱码,一再确认设置了UTF-8,搜索很多结果也是关于这个

另外mac上位置的错乱有考虑到是否是传输截断有问题,是不是长度太长导致

转机:/puzbus/archive//06/07/3356342.html

总结出来两点

邮件内容过长会导致解析问题解决:Content-Transfer-Encoding: base64复盘补充:

问题一:邮件的长度限制依据是什么,长邮件该如何处理

php mail 方法的文档里有注明上限(印象中超过长度会是截断等处理,所以出现乱码也没想到是长度问题)

而php 基本方法设置上限的依据则是RFC 2822 2.1.1。

同时,它也提供了处理的建议,就是将文本内容拆成多行。拼装的html结构则是一行,显然是超过了长度。

【推荐学习:html视频教学】

问题二:为什么base64就可以解决邮件单行过长的问题

1. 理解base64是什么,参考了base64笔记 /blog//06/base64.html,简单来说base64中的3个字节代表ASCII中的4个字节

2. 这和换行有什么关系呢?根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行

问题三:Content-Transfer-Encoding 取不同值代表什么?

参考:MIME笔记和 /Protocols/rfc1341/5_Content-Transfer-Encoding.html

个人理解,除了base64以外的方式都没有插入换行的效果,也就无法解决问题

补充1:text类需要补充charset

补充2: “=?【编码】?B?”.base64_encode($subject).”?=”; B代表 base64 Q代表quoted-printable

如果觉得《如何解决html邮件乱码问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。