使用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
相关产品推荐
相关产品推荐

