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

Sendgrid动态模板内嵌base64图片发送后不显示问题求助

问题根因
  • 绝大多数主流邮件客户端(Gmail、Outlook、国内的QQ/163邮箱等)均默认屏蔽base64格式内嵌图片的渲染,这是客户端出于安全管控、邮件体积限制的通用策略,和Sendgrid控制台的渲染逻辑无关:控制台为网页端环境,本身支持base64图片解析,所以预览正常,但是发信后客户端不兼容就会出现裂图。
  • Sendgrid处理动态模板时,会默认对超大体积的base64资源做过滤或截断,你可以查看收到的邮件原始源码,大概率img标签的src属性已经被处理为空或内容不完整。
可落地解决方案

方案1:使用Sendgrid内嵌附件(inline attachment)挂载图片(兼容性高)

操作流程:

  1. 先剥离base64内容前的data:image/xxx;base64,前缀,仅保留纯编码内容
  2. 调用Java API发信时,将图片添加为内嵌附件,设置唯一的content-id(cid)标识
  3. 将模板中img标签的src从base64内容替换为cid:你设置的cid值
    Java API示例代码:
import com.sendgrid.*;
import com.sendgrid.helpers.mail.*;
import com.sendgrid.helpers.mail.objects.*;

// 初始化Mail对象等前置逻辑省略
Attachments inlineImg = new Attachments();
// 填入剥离前缀后的base64图片内容
inlineImg.setContent("iVBORw0KGgoAAAANSUhEUgAA...");
inlineImg.setType("image/png"); // 替换为你实际的图片格式:image/jpeg等
inlineImg.setFilename("custom-img.png");
inlineImg.setDisposition("inline");
inlineImg.setContentId("custom-inline-img-001"); // 该值要和模板中cid对应
mail.addAttachments(inlineImg);

模板中对应img标签示例:

<img src="cid:custom-inline-img-001" alt="自定义图片">

方案2:公网静态资源链接替代(兼容性最好)

将图片上传到你自己的可公网访问的静态资源存储服务,直接在模板img的src属性填写图片的公网访问链接即可,无需额外调整Sendgrid API配置。

方案3:关闭Sendgrid内容校验(不推荐)

如果必须保留base64内嵌的写法,可在发信时开启skipContentValidation配置关闭Sendgrid的内容过滤,但是该方案仅能保证base64内容不被Sendgrid截断,仍然存在邮件客户端不兼容的问题,实际使用率极低。
示例配置:

MailSettings mailSettings = new MailSettings();
SkipContentValidation skipValidation = new SkipContentValidation();
skipValidation.setEnable(true);
mailSettings.setSkipContentValidation(skipValidation);
mail.setMailSettings(mailSettings);

内容的提问来源于stack exchange,提问作者Nitesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:21:02