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

使用SendGrid .NET API发邮件后,如何获取非X-Message-Id的Message-Id?

.NET结合SendGrid获取标准Message-ID的方法

你提到的X-Message-Id是SendGrid平台内部的跟踪标识,而邮件标准(RFC 5322)定义的Message-ID是邮件头中的通用唯一标识,获取方式分两种场景:

1. 发送前自定义Message-ID

如果需要指定自己的Message-ID,可以在构建SendGrid消息时手动添加邮件头字段,格式需符合RFC规范(通常包含@和域名,用尖括号包裹):

var msg = new SendGridMessage();
msg.AddTo("recipient@example.com");
msg.SetFrom("sender@example.com");
msg.SetSubject("测试邮件");
msg.AddContent(MimeType.Text, "邮件内容");

// 添加自定义Message-ID
msg.AddHeader("Message-ID", "<my-custom-id@your-domain.com>");

var client = new SendGridClient("你的SendGrid API密钥");
var response = await client.SendEmailAsync(msg);

发送后,邮件头中的Message-ID就是你设置的值,同时SendGrid仍会返回它的X-Message-Id。

2. 获取SendGrid自动生成的标准Message-ID

若不需要自定义,想获取SendGrid实际发送邮件时生成的标准Message-ID,可以配置SendGrid事件Webhook,监听delivered事件:
当邮件成功投递后,SendGrid会向你指定的.NET接口发送事件数据,其中email对象的message_id字段就是标准Message-ID。

简化的接口示例:

[HttpPost("sendgrid-webhook")]
public IActionResult HandleSendGridEvents([FromBody] List<SendGridEvent> events)
{
    foreach (var ev in events)
    {
        if (ev.EventType == "delivered")
        {
            string standardMessageId = ev.EmailDetails.MessageId;
            // 此处处理获取到的标准Message-ID
        }
    }
    return Ok();
}

// 对应简化的事件模型类
public class SendGridEvent
{
    [JsonPropertyName("event")]
    public string EventType { get; set; }
    
    [JsonPropertyName("email")]
    public EmailDetails EmailDetails { get; set; }
}

public class EmailDetails
{
    [JsonPropertyName("message_id")]
    public string MessageId { get; set; }
}

两者的核心区别

  • X-Message-Id:SendGrid内部用于跟踪邮件状态的ID,仅在SendGrid系统内有效。
  • 标准Message-ID:邮件系统通用的唯一标识,用于跨邮件服务商追踪邮件,可自定义或通过Webhook获取。

内容的提问来源于stack exchange,提问作者Sergio Rondon Polanco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:01:02