mailto协议发送含非执行JS脚本邮件时&后内容截断如何修复
问题根因
&是URL查询参数的默认分隔符,mailto链接的参数规则为mailto:收件人地址?subject=邮件主题&body=邮件正文,当正文内容自带&时,浏览器会将其识别为mailto参数的分隔标记,&后的内容会被当成独立的URL参数处理,不会被纳入邮件正文,因此出现截断。
解决方案
所有插入mailto链接的参数内容,包括邮件主题、邮件正文,都需要先通过URL编码转义特殊字符,避免和mailto本身的参数规则冲突。JS可直接使用内置的encodeURIComponent()方法完成编码。
正确实现代码
// 定义原始内容 const script = `<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID&type=0&name=Name&size=120";document.head.appendChild(script); </script>`; const email = "接收方邮箱地址"; const subject = "你的邮件主题"; const body = "FewWords" + script; // 编码后拼接mailto链接 window.location.href = "mailto:" + email + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body);
补充说明
encodeURIComponent会自动将&转义为%26、双引号转义为%22、空格转义为%20,所有特殊字符都会转为URL安全格式,不会触发参数截断。- 主流浏览器和邮件客户端对mailto链接的长度限制通常在2000字符以内,如果需要发送的内容过长,建议更换为附件形式发送,避免超长导致内容丢失。
内容的提问来源于stack exchange,提问作者Amaury Laroze
相关产品推荐
相关产品推荐

