首页 > 解决方案 > Sendgrid 入站 Webhook - 未送达的通知

问题描述

根据 sendgrid 文档,入站解析器 webhook 响应失败的方式是,它将重试将电子邮件发布到配置的端点 3 天,如果未送达,将丢弃电子邮件。

Parse API 会将已解析的电子邮件发布到您指定的 URL。如果 POST 不成功,SendGrid 会自动排队并重试任何以 5XX 状态响应的 POST。这可以防止错误配置其网站或 POST URL 的客户丢失数据。

以 2xx 状态响应 POST 请求以阻止电子邮件重试。

为避免返回错误,您的链接必须在收到电子邮件时返回 2xx HTTP 代码。此回复让我们的系统知道您的链接已收到电子邮件。然后将其从我们的发送队列中删除。如果我们没有收到有效的 2xx HTTP 响应,我们的服务器将认为他们未能传递您的消息。3 天后无法送达的邮件将被丢弃。

我想知道在删除未送达的电子邮件之前,sendgrid 是否会通知发件人他们的电子邮件无法送达?

标签: parsingwebhookssendgridinbound

解决方案


根据我运行的一些测试,SendGrid 似乎不会向发件人发送通知,也没有任何简单的方法可以确定 SendGrid 是否丢弃了任何入站电子邮件。

尽管文档措辞有些含糊,但我基于测试(与文档措辞一致)的理解是这样的:

  • 服务器返回 2xx:电子邮件被视为已接受,不再进行尝试。
  • 服务器返回 5xx:服务器有错误,在返回 2xx 之前进行了尝试(请参阅下面的后续尝试时间),或 72 小时过去了
  • 服务器返回任何其他响应,或 DNS 记录不存在:电子邮件被视为失败,不再进行尝试。

我的结论是基于我在一周内进行的一些测试,从中我确定了以下内容:

案例 1. 解析服务器返回 400 或 403 错误
电子邮件在一次尝试后被丢弃。
不再尝试 POST 电子邮件。
不会向发件人或 SendGrid 帐户发送通知。

(测试方法:将 SendGrid 配置为返回上述错误代码之一的 URL。检查了 1 周以上的服务器日志,并注意到仅进行了一次尝试。)

案例 2. 解析挂钩 URL 没有 DNS 记录
电子邮件被丢弃,大概是在一次尝试之后。
不会向发件人或 SendGrid 帐户发送通知。

(测试方法:将hook URL配置到没有任何DNS记录的子域。运行DNS搜索并尝试打开hook URL以确认DNS记录不指向任何地方。发送电子邮件。然后,12小时后,添加一个适当的记录到子域以将其指向脚本。检查服务器日志并确认没有尝试发布电子邮件。随后的电子邮件尝试成功发布。)

案例 3. 解析服务器返回 500 错误
SendGrid 尝试以以下时间间隔 POST 到钩子 URL:
+0 +5m +10m +15m +20m
+25m +35m +50m +1h20m +2h20m
...然后每 3 小时
最后一次尝试发生 +71h20m

20 分钟的偏移量有点不寻常,但它落在整点上,所以可能是因为消息在整点排队尝试 POST。
72 小时后不再尝试 POST 电子邮件。
不会向发件人或 SendGrid 帐户发送通知。

统计文档
提到了统计 的可用性,但是,我发现这些数字是不准确的。

例如,在我的测试期间,我有许多电子邮件通过 API,包括一些打算成功的邮件(并且确实 POST 到我的服务器)和一些打算失败的邮件(作为上述测试的一部分),但是,返回的数字没有对齐。


在以下情况下应小心谨慎:

  • 服务器停机时间:这最终取决于服务器的配置方式。如果服务器返回 5xx 响应代码,SendGrid 将继续尝试 POST 电子邮件。我还尝试测试超时场景,但是,SendGrid 似乎非常耐心(例如,我让脚本暂停 10 分钟,SendGrid 保持连接 10 分钟,但有趣的是,由于 5 分钟后发生第二次尝试,电子邮件发布两次)。
  • 返回 4xx 错误代码的服务器配置错误。SendGrid 将删除电子邮件。

还应注意,如果电子邮件被丢弃,似乎没有任何可靠的方法可以找到它。


推荐阅读