在 Microsoft Graph/Outlook REST API 中识别 DSN(交付状态通知)或 NDR(未交付报告)和失败的收件人收件人、状态、通知、报告

2023-09-07 09:13:15 作者:心随你痛

我在这里发现了几个关于在各种邮件服务器中检测邮件状态的问题,但仍然不清楚如何使用 Outlook REST API 来完成.

I found several questions here about detecting mail status in various mail servers, but still it's unclear how to do it using Outlook REST API.

在文档中 我们可以看到请求的响应:

In documentation we can see the response for request:

GET https://graph.microsoft.com/v1.0/me/messages/AAMkADhMGAAA=

但似乎答案没有包含此类信息的字段.我还研究了对标头的请求:

But it seems like the answer doesn't have a field, which contains such information. I also looked into request for headers:

https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages?$select=subject,internetMessageHeaders

不幸的是,没有像 X-Failed-Recipients 这样的标题.

Unfortunately, there was no header like X-Failed-Recipients.

是否有任何方法可以使用 Outlook API 获取递送状态和/或失败的收件人?

Are there any ways to get delivery status and/or failed recipients using Outlook API?

推荐答案

我的方法是像你一样获取消息详细信息和 internetMessageHeaders.

My approach to this was getting message details and the internetMessageHeaders as you have done.

首先我检查标题 Content-Typemultipart/report表示 DSN(交付状态通知),请参阅 RFC3461.

First I check for header Content-Type value multipart/report which denotes a DSN (delivery status notification), see RFC 3461. GET https://graph.microsoft.com/v1.0/me/messages/<id>?$select=internetMessageHeaders

然后我得到消息的 toRecipients 属性,其中包含失败的收件人的电子邮件地址.

Then I get the toRecipients property of the message which contains the email address of the recipient that failed.

GET https://graph.microsoft.com/v1.0/me/messages/<id>

注意:

并非所有邮件服务器都遵循 RFC3461,因此某些 DSN/NDR 电子邮件可能会漏掉我找不到任何说明 toRecipients 始终包含失败收件人的值的文档,但到目前为止我还没有找到相反的示例. Not all mail servers follow RFC3461, so some DSN/NDR emails may slip through I could not find any documentation saying that toRecipients always contains the value of the failed recipient, but so far I have yet to find an example to the contrary.