如何解决html邮件乱码问题

html邮件乱码的解决办法:1、在mail函数前一行打印message内容;2、将邮件内容保存为html文件后查看;3、设置UTF-8编码。

如何解决html邮件乱码问题

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

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

问题描述:

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

立即学习“前端免费学习笔记(深入)”;

利用PHP中的mail函数

//拼装header。指定编码utf-8,解析邮件正文中的中文$headers = "From: xxx@xxx";$headers .= "MIME-Version: 1.0";$headers .= "Content-type: text/html; charset=utf-8";$headers .= "Content-Transfer-Encoding: 8bit";//拼装标题  解决中文标题乱码问题$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 乱码形如:如何解决html邮件乱码问题

 排查:

 1. 确认是否拼装错误

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

2. 确认收到邮件内容

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

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

如何解决html邮件乱码问题

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

如何解决html邮件乱码问题

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

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

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

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

如何解决html邮件乱码问题

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

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

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

如何解决html邮件乱码问题

如何解决html邮件乱码问题

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

补充1:text类需要补充charset 

如何解决html邮件乱码问题

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

 

以上就是如何解决html邮件乱码问题的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2949736.html

(0)
上一篇 2025年3月11日 23:21:21
下一篇 2025年3月11日 23:21:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • html如何设置语言为中文

    在HTML中,可以使用type属性设置语言为中文,只需要给html元素设置“lang=”zh””代码即可。属性lang是英语“language”的缩写,意思是语言,声明当前页面的语言类型;当值为“zh”时,表示当前页…

    2025年3月11日
    000
  • html隐藏控件方法

    html隐藏控件的方法:1、通过“”方法隐藏;2、通过“display:none”属性隐藏;3、通过“visibility: hidden;”属性隐藏。 本文操作环境:windows7系统、HTML5版、Dell G3电脑。 html控件隐…

    2025年3月11日
    200
  • shtml和html的区别

    shtml和html的区别在于html是一种纯静态的标记型语言,在html文档里写的内容和用户打开浏览器看到的内容是一样;而shtml是一种半静态半动态的标记型语言,当用户在浏览器浏览shtml文档时,SSI命令会被解析,再呈现内容给用户。…

    2025年3月11日 编程技术
    200
  • html怎么定位

    html定位的方法:首先创建一个HTML示例文件;然后使用a标签写好3个菜单以及内容;接着给每个内容标题的a标签中加上name属性并添加“#链接”;最后在“#”前面加上具体的页面即可自动定位到这个页面的具体位置。 本文操作环境:window…

    2025年3月11日 编程技术
    200
  • html怎么禁止另存

    html禁止另存的方法:1、通过“$(document).ready(function(){…}”方法禁止另存;2、在整个页面上面加一层“保护层”,让用户不能操作真正的页面。 本文操作环境:windows7系统、HTML5&am…

    2025年3月11日
    200
  • html怎么增加一行

    html增加一行的方法:首先创建一个HTML示例文件;然后通过table标签创建一张表格;最后通过js代码“function addRow() {…}”方法使表格增加一行即可。 本文操作环境:windows7系统、HTML5&a…

    2025年3月11日
    200
  • html怎么设置图片按钮

    html设置图片按钮的方法:首先创建一个HTML示例文件;然后通过button标签创建一个按钮;最后通过background属性设置图片即可。 本文操作环境:windows7系统、HTML5&&CSS3版、Dell G3电脑…

    2025年3月11日
    200
  • html怎么设置header

    html设置header的方法:首先创建一个HTML示例文件;然后在body中输入“”标签;最后在该标签内输入文档或者文档的一部分区域的页眉内容即可。 本文操作环境:windows7系统、HTML5版、Dell G3电脑。 html怎么设置…

    2025年3月11日
    200
  • html背景图片怎么设置平铺方式

    在html中,可利用background-repeat属性来设置背景图片的平铺方式;当属性值设置为“repeat”时可向垂直和水平方向平铺,“repeat-x”时可水平平铺,“repeat-y”时可垂直平铺,“no-repeat”时不平铺。…

    2025年3月11日
    200
  • focus在HTML是什么意思

    在html中,focus是“焦点”的意思。“:focus”选择器用于选取获得焦点的元素,只需要给元素设置“元素:focus{属性:属性值}”样式即可。“:focus”是一个伪类,它适用于具有焦点的元素,该选择器应用于元素具有焦点的时间内。 …

    2025年3月11日
    200

发表回复

登录后才能评论