求助:Gmail发送含Base64图片的邮件不显示,img标签src被移除
解决Gmail中Base64图片无法显示且src被移除的问题
Gmail会出于安全和性能考量,过滤HTML邮件里的data URI格式图片,直接移除img标签的src属性,这就是你遇到的图片加载失败的原因。下面是几种可行的解决方案:
1. 用CID引用将图片作为附件嵌入
这是兼容性最好的方案,几乎所有主流邮件客户端都支持:
- 把图片作为邮件附件添加,同时给图片设置唯一的Content-ID(CID)
- 在HTML的img标签里,用
cid:你的图片CID作为src值
示例(以Node.js的nodemailer库为例):
const nodemailer = require('nodemailer'); async function sendEmbeddedImageMail() { // 创建邮件传输器 let transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: '你的邮箱@gmail.com', pass: '你的应用密码' // 注意:Gmail需开启两步验证并使用应用密码 } }); // 发送邮件 let sendResult = await transporter.sendMail({ from: '你的名字 <你的邮箱@gmail.com>', to: '收件人邮箱@example.com', subject: '测试嵌入图片', html: '<p><img src="cid:icon_unique_cid" alt="icon.png" width="auto" height="auto"></p>', attachments: [ { filename: 'icon.png', path: './本地图片路径/icon.png', // 替换为你的图片本地路径 cid: 'icon_unique_cid' // 必须和html中的cid值完全一致 } ] }); } sendEmbeddedImageMail();
2. 使用公开可访问的图片URL
如果你的图片可以上传到公开服务器,直接用HTTP/HTTPS链接作为img的src:
<p><img src="https://你的域名.com/icon.png" alt="icon.png" width="auto" height="auto"></p>
注意:确保这个URL是公开可访问的,且不会被Gmail标记为恶意链接。
3. 规避Gmail的过滤规则
- 确认邮件没有被归类为垃圾邮件,垃圾邮件的HTML过滤会更严格
- 简化HTML结构,移除不必要的自定义类或复杂样式,减少被误判的概率
补充:Base64图片在当前主流邮件客户端(Gmail、Outlook等)的支持性都很差,不仅会触发过滤,还会大幅增加邮件体积,所以不建议再使用这种方式。
内容的提问来源于stack exchange,提问作者VijayRathod20
相关产品推荐
相关产品推荐

