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

调用Sendgrid Mail Send接口返回202但响应体为空问题排查

Sendgrid Mail Send接口返回202空响应排查及追踪配置指南

202空响应的正常性说明

  • Sendgrid v3版本的邮件发送接口默认逻辑为:请求校验通过、邮件进入发送队列后,直接返回202 Accepted状态码,响应体为空,属于正常表现,不是配置错误。
  • 文档中标注的带结构化字段的响应内容,仅在请求时显式要求返回消息标识时才会生成,默认不返回响应体内容。

可用于状态追踪的邮件ID获取方式

要实现点击、回复状态追踪,首先需要拿到每封邮件的唯一标识做业务关联,有两种稳定获取方式:

  • 发送请求时在请求头添加X-Message-ID: true,接口会将当前邮件的唯一追踪ID放在响应头的x-message-id字段中返回,无需依赖响应体
  • 使用官方Node.js SDK调用时,直接从返回的response对象的headers属性中读取上述字段即可,空响应体不影响ID获取

点击、回复追踪配置(含Ngrok测试注意事项)

  • 点击、打开追踪不需要自行做链路埋点:先在Sendgrid后台追踪设置页开启点击追踪、打开追踪开关,Sendgrid会自动替换邮件内的链接为追踪跳转地址,用户触发点击、打开动作时会自动上报事件
  • 回复状态、全链路事件的主动推送需要配置Event Webhook,Ngrok测试时注意以下配置项:
    • Ngrok免费版每次启动会生成新的公网域名,重启Ngrok后必须同步更新Sendgrid后台配置的Webhook接收地址
    • 勾选需要推送的事件类型,至少包含clicked、replied两类,可根据业务需要额外勾选送达、退信、投诉等事件
    • Webhook接口收到Sendgrid推送的事件后,需要在3秒内返回2xx状态码,否则Sendgrid会按策略重复推送,Ngrok默认无额外超时拦截,只要本地服务响应及时即可
    • 建议开启Webhook签名校验,避免非法请求伪造事件上报

代码调整参考

email.send({
    to: 'temikey@gmail.com',
    from: 'sam@market.io', // 该发件地址必须对应Sendgrid后台已完成认证的域名,否则邮件可能被拦截或进入垃圾箱
    subject: 'Hello world',
    text: 'Hello plain world!',
    // 直接在请求内开启追踪,不用全局配置
    trackingSettings: {
        clickTracking: {
            enable: true,
            enableText: true // 纯文本邮件内容也开启点击追踪
        },
        openTracking: {
            enable: true
        }
    },
    headers: {
        'X-Message-ID': 'true'
    }
}).then(([response, body]) => {
    console.log('发送状态码:', response.statusCode);
    const trackMessageId = response.headers['x-message-id'];
    console.log('邮件追踪ID:', trackMessageId);
    // 此处可将追踪ID和自身业务的用户、通知记录做绑定,后续收到Webhook事件时做匹配
}).catch(error => {
    console.error('发送失败详情:', error.response?.body);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:00:53