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

Sendgrid Python库发送邮件返回空响应体,如何获取sg_message_id?

解决SendGrid发送邮件后获取sg_message_id的问题

SendGrid的v3 API返回202状态码时,响应体确实是空的——这是因为邮件此时仅进入SendGrid的发送队列,尚未完成处理,因此不会在响应体中返回消息ID。要实现发送记录与webhook事件的关联,有两种可靠方案:

方案一:自定义唯一标识(推荐)

自己生成一个唯一ID(比如UUID),通过邮件的custom_args参数附加到邮件上,发送时将这个ID存入数据库。当webhook触发打开/点击等事件时,事件数据里会包含这个自定义参数,直接用它匹配数据库记录即可。

示例代码:

import uuid

# 生成自定义唯一标识
my_message_id = str(uuid.uuid4())

message = Mail(
    from_email=from_email,
    to_emails=recipients,
    subject=subject,
    plain_text_content=text_content,
    html_content=html_content
)
# 添加自定义参数,用于后续关联
message.custom_args = {"internal_message_id": my_message_id}
message.tracking_settings = TrackingSettings(
    open_tracking=OpenTracking(enable=True)
)

try:
    sg = SendGridAPIClient(api_key=sendgrid_key)
    sg.send(message)
    # 将自定义ID和发送记录绑定存入数据库
    # save_to_db(my_message_id, recipients, subject, ...)
except Exception as e:
    print(f"发送失败: {e}")

当收到webhook事件时,事件payload里的custom_args.internal_message_id就是你存入的ID,直接用它找到对应的发送记录并更新状态。

方案二:从响应头获取SendGrid生成的Message-ID

SendGrid返回202响应时,响应头里的X-Message-Id字段就是它生成的邮件唯一标识,这个ID和webhook事件里的sg_message_id完全一致,可以直接提取并存入数据库。

示例代码:

message = Mail(
    from_email=from_email,
    to_emails=recipients,
    subject=subject,
    plain_text_content=text_content,
    html_content=html_content
)
message.tracking_settings = TrackingSettings(
    open_tracking=OpenTracking(enable=True)
)

try:
    sg = SendGridAPIClient(api_key=sendgrid_key)
    response = sg.send(message)
    # 从响应头提取SendGrid生成的消息ID
    sg_message_id = response.headers.get("X-Message-Id")
    if sg_message_id:
        # 将sg_message_id存入数据库
        # save_to_db(sg_message_id, recipients, subject, ...)
except Exception as e:
    print(f"发送失败: {e}")

两种方案对比:自定义ID完全由你控制,不依赖SendGrid的返回逻辑,适合需要多系统关联的场景;用SendGrid的ID则省去自己生成标识的步骤,更贴合SendGrid的原生事件体系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:20