首页 > 解决方案 > 30 多分钟后无法通过事件 API 获取最近的事件;这些延迟了多久?

问题描述

我正在为使用 Mailgun 的应用程序进行一些自动化集成测试。我想在发送电子邮件后使用 Mailgun API 查询电子邮件,以确认内容符合我的期望。

从 API 文档来看,似乎没有办法做一个简单GET /messages的,而是我应该使用事件 API(参见https://documentation.mailgun.com/en/latest/api-sending.html#retrieving-存储消息

事件 API 相对简单,我可以使用时间戳和收件人过滤结果,如下所示:

curl -s --user 'api:{MY_API_KEY_HERE}' -G \
     "https://api.mailgun.net/v3/{MY_DOMAIN_HERE}/events" \
      --data-urlencode begin=1606760326.939 \
      --data-urlencode ascending=true \
      --data-urlencode limit=5 \
      --data-urlencode recipient={MY_EXPECTED_RECIPIENT_EMAIL_HERE}

在此示例中,我使用的时间戳是 2020 年 11 月 30 日星期一下午 6:18:46.939 UTC,在此之后我应该收到最多 5 封电子邮件。在那之后我发送了一封测试电子邮件并在我的测试收件箱中确认收到,所以我知道一封电子邮件已发送。

但是,当我在世界标准时间下午 6:18 发出该呼叫时,我没有收到任何结果......并在世界标准时间下午 6:50 再次尝试,仍然没有。当我在周末进行类似的测试时,我发现发送电子邮件和查询事件 API 以获取信息之间的延迟几乎为零......

在我看来,Events API 有很大的延迟,不能真正用于这种类型的用例(轮询以确认电子邮件已发送)。从 API 文档中,它确实暗示需要谨慎使用此端点(请参阅https://documentation.mailgun.com/en/latest/api-events.html#event-polling),但尚不清楚是否有任何种类关于事件何时实际出现的松散“保证”。

有谁知道这些事件会延迟多久?

或者,有没有更好的方法让我在发送不依赖此 API 的单个电子邮件后查询其状态?我需要能够检查已排队的最新消息并检查内容...

标签: mailgun

解决方案


MailGun 端没有延迟。问题是 API 调用参数。我会说他们的 API 文档有点误导。您可以将两个时间戳传递给 API。它们是beginend

您正在发送begin带有时间戳的单个参数。正如我在现实中发现的那样,当您发送单个begin参数时,MaulGun 会返回您通过的时间戳之前的所有事件。

当您更改beginend并将其作为单个参数发送到 API 时,MailGun 将返回您传递的时间戳之后的所有事件。

并且仅当您将参数beginend参数都发送到 API 时,MailGun 才会返回在这些事件beginend您传递的时间戳之间发生的所有事件。


推荐阅读