You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Base64字符串创建内嵌图片附件?Gmail显示异常求助

解决Gmail中内嵌邮件图片显示破损的问题

看起来你遇到的核心问题是没有正确处理Base64字符串到二进制数据的转换,导致邮件内嵌的附件内容格式错误,Gmail无法解析。下面是具体的排查和修复步骤:

1. 修复附件数据的编码处理

你的@user.img是Base64编码的字符串,但Rails的attachments.inline期望接收二进制格式的图片数据,而不是Base64文本。直接传入Base64字符串会导致附件内容是纯文本而非图片流,Gmail自然无法识别。

正确的做法是先将Base64字符串解码为二进制:

# 在邮件发送器中
# 先移除Base64前缀(如果你的img字段包含"data:image/png;base64,"的话)
base64_image = @user.img.sub(/^data:image\/png;base64,/, '')

# 解码为二进制后赋值给内嵌附件
attachments.inline["user.png"] = {
  data: Base64.decode64(base64_image),
  mime_type: "image/png"
}

注意:不需要设置:encoding => "base64",Rails会自动处理内嵌附件的编码。

2. 确认模板中的引用方式

如果你用的是Haml模板,= image_tag attachments['user.png'].url是正确的;如果是ERB模板,需要写成<%= image_tag attachments['user.png'].url %>。

另外,你也可以直接通过CID(Content-ID)引用图片,效果是一样的:

= image_tag "cid:user.png"

或者ERB:

<%= image_tag "cid:user.png" %>

3. 额外检查点

  • 验证@user.img的有效性:确保它是完整的、没有损坏的Base64字符串,你可以把它复制到在线Base64转图片工具中测试,确认能正常生成图片。
  • 查看原始邮件内容:发送测试邮件后,下载原始邮件(.eml格式),检查内嵌附件的Content-ID是否和img标签的cid匹配,同时确认附件的Content-Type是image/png,编码为base64。

按照上面的步骤调整后,Gmail应该就能正常显示内嵌图片了。

内容的提问来源于stack exchange,提问作者bo-oz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:25:00