邮件模板中通过JS加载Base64图片无法渲染问题求助
邮件模板图片不显示的解决方案
核心原因
绝大多数邮件客户端会禁用外部JS文件加载,甚至内联JavaScript代码也会被拦截,这才是图片不显示的根本原因——不是服务器找不到EncodedImage.js,而是邮件根本不会去加载和执行这个脚本,也不会运行你写的getImagePath()函数。
直接可行的解决方法
把Base64编码直接嵌入到<img>的src属性里,完全不需要JavaScript:
- 打开你的
EncodedImage.js文件,复制Image.encoding变量里的Base64字符串内容。 - 修改邮件模板里的
<img>标签,格式如下(注意替换图片类型,比如png换成你的图片实际格式jpg/gif等):
<img src="data:image/png;base64,这里粘贴你复制的Base64编码">
- 去掉模板里所有和
EncodedImage.js相关的<script>标签,包括内联的getImagePath()函数。
补充说明
浏览器里测试正常是因为浏览器允许加载外部脚本并执行JS,但邮件客户端出于安全(防止恶意脚本)和兼容性考虑,几乎都不支持脚本功能,所以这种依赖JS动态设置图片的方式在邮件里完全行不通。
如果Base64编码过长导致模板体积太大,也可以把图片上传到稳定的公共存储服务(比如公司内部的CDN),直接用图片的公开URL作为src值,比如:
<img src="https://你的CDN地址/图片文件名.png">
但要确保这个URL长期有效且能被邮件客户端访问到。
内容的提问来源于stack exchange,提问作者Rogenwiczar
相关产品推荐
相关产品推荐

