如何将 sendgrid webhook sg_message_id 关联到已发送邮件?

Posted

技术标签:

【中文标题】如何将 sendgrid webhook sg_message_id 关联到已发送邮件?【英文标题】:How to associate sendgrid webhook sg_message_id to sent mail? 【发布时间】:2016-02-13 08:48:47 【问题描述】:

Sendgrid webhook 有 sg_message_id 但是发送邮件时Web API v2的响应没有sg_message_id。 实际上,只有消息只显示success 或失败。

那么,我如何将发送的邮件和 webhook 回调关联起来?

我在 SO 中检查了过去的问题,但它没有提供解决方案。

谢谢。

【问题讨论】:

【参考方案1】:

发送电子邮件的 Web APIv2 调用确实只响应 message :"success" 答案,但此时不会生成 sg_message_id。 API 调用应答只是确认电子邮件已发送到 SendGrid 进行处理。

电子邮件被发送到 SendGrid,并在那里接收通过 Event Webhook 帖子提供的 sg_message_id 值。

【讨论】:

那么,请求& webhook 是没有办法匹配的吗?你觉得呢?【参考方案2】:

您可以使用唯一的参数。获取您的唯一 ID(如主键)并在发送电子邮件期间将其提供给 sendgrid API。您将在事件 webhook 中取回它。

https://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html

【讨论】:

这必须被接受为答案。谢谢德米特里!实际上这是必须添加到 Sendgrid 文档中的内容!!! v3 SendGrid API 有类似的东西吗? @ktingle 是的,对于 v3 API,使用 custom_args 注意:如果您的 hook 失败并且您需要追溯数据,您将需要为 Email Activity API 支付未公开的金额。 (出于某种原因,未显示免费用户的价格)。【参考方案3】:

编辑:最佳实践似乎是使用custom arguments(请参阅documentation)。这在文档中并不明显(截至今天)。


在 Web API v3 中,响应包含一个特殊的标头 X-Message-Id(请参阅 https://sendgrid.com/docs/Glossary/x_message_id.html)。

这可以稍后与 webhook 中的sg_message_id 匹配:https://sendgrid.com/docs/Glossary/message_id.html

文档没有说清楚,但是X-Message-Id这个header其实并不等于sg_message_id,而是sg_message_id的前缀。

例如:

X-Message-Id = "MUvGg3V1ThOu3oe8eRqFrA" sg_message_id = "MUvGg3V1ThOu3oe8eRqFrA.filter0001p2iad2-21183-5AF0BD9B-E.0"

【讨论】:

我建议不要这样做;这种类型的匹配完全有可能不能 100% 起作用。正如您在编辑中指出的那样,自定义参数避免了这种可能性 其实我也是。当时,文档告诉人们应该在任何地方使用那些 X-Message-Id,但是实现有点奇怪...... 在这 30 天之后 - 如果用户在 40 天(因此超过 30 天限制)之后对该邮件执行任何活动(例如再次打开或单击),该邮件将返回到电子邮件活动历史记录? 我不会使用它。 sendgrid 可以随时更改此模式。不要依赖它。

以上是关于如何将 sendgrid webhook sg_message_id 关联到已发送邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postman 中使用 SendGrid 的 Inbound Parse Webhook 示例?

什么是webhook

如何将动态数据传递到sendgrid webapp上设计的电子邮件模板? : - | Sendgrid

如何验证入站邮件?有SendGrid吗?

如何通过 API C# 和模板将自定义变量添加到 SendGrid 电子邮件

如何使用SendGrid将图像嵌入到Node.js中的html邮件中