如何解决html邮件乱码问题


当前第2页 返回上一页

windows 乱码形如:

排查:

1. 确认是否拼装错误

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

2. 确认收到邮件内容

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

3. 其他

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

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

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

转机:https://www.cnblogs.com/puzbus/archive/2013/06/07/3356342.html

总结出来两点

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

复盘补充:

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

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

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

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

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

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

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

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

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

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

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

补充1:text类需要补充charset

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

以上就是如何解决html邮件乱码问题的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

Html acronym标签怎么用

Html中<meta>标签该如何使用

Html cite标签怎么用

Html 本地存储

Html中hr是什么意思

怎么向Html添加音频

Html的元素有哪几种隐藏方式

Html学习之Html列表介绍(代码实例)

Html行内元素有哪些

Html首行缩进怎么设置

更多相关阅读请进入《Html》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...