mailgun - 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 端没有延迟。问题是 API 调用参数。我会说他们的 API 文档有点误导。您可以将两个时间戳传递给 API。它们是begin
和end
。
您正在发送begin
带有时间戳的单个参数。正如我在现实中发现的那样,当您发送单个begin
参数时,MaulGun 会返回您通过的时间戳之前的所有事件。
当您更改begin
为end
并将其作为单个参数发送到 API 时,MailGun 将返回您传递的时间戳之后的所有事件。
并且仅当您将参数begin
和end
参数都发送到 API 时,MailGun 才会返回在这些事件begin
和end
您传递的时间戳之间发生的所有事件。
推荐阅读
- bash - 为什么在“echo”和变量中使用 awk 命令时无法获得类似的结果
- spring-boot - Spring引导数据redis不从存储库返回值
- signalr - 如何将 SignalR 与多页 Web 应用程序一起使用?
- onedrive - OneDrive Graph API 在移动到其他文件夹之前检测文件是否被任何用户打开
- flutter - 在 SharedPreferences 上颤振保存对象
- shiny - 控制搜索框位置 RenderDataTable R
- xamarin.forms - Azure DevOps Xamarin.iOS 模拟器生成输出
- java - 如何编写 mybatis 映射器以便在中间创建的临时表中插入?
- python - 在输出时订购 json jable
- python - 在 Python 中从子构造函数调用父构造函数的细微差别