有没有办法在 Microsoft Graph API 中解密 Outlook 邮件 ID?
Is there a way to decrypt Outlook Message ID in Microsoft Graph API?
如果 A 向 B 发送了一封电子邮件,然后您连接到每个人的 Microsoft Graph API,则存在一个问题:'internetMessageId' 在 A "Sent Emails" 中是相同的并且B "inbox" 但 Outlook Id ('Id') 不同。
--> 有没有办法在 Outlook Id 中解码/检测它是同一封电子邮件但从不同邮箱看到的事实?
背后有一个简单的问题:如果我为一家公司的所有员工邮箱订阅了 webhooks(比如说 1000 人),并且 1 个人向 "all company" 组发送了一封电子邮件。然后我的服务器将收到关于这封电子邮件的 1001 POST。由于通知参数中的唯一信息是 Outlook 邮件 ID,因此我无法检测到它是关于同一封邮件的。唯一的方法是对图 API 进行 1001 次调用以获取 internetMessageId,然后在此基础上进行过滤。它看起来真的很重而且很耗资源。有没有办法避免这种情况?无论是来自 webhook 端,来自通知内容,还是来自 Outlook Message Id 解码?
谢谢。
不,Id
是不透明的。它不是基于 Internet 消息 ID。
Microsoft Graph API 不支持向您的通知负载添加字段,但 Outlook REST API 本身支持。如果您直接使用 Outlook 端点 (https://outlook.office.com/api/
),则可以使用 $select
来获取通知负载中的其他字段,使用我们称为 "rich notifications".
的功能
您的订阅请求类似于:
{
"@odata.type": "#Microsoft.OutlookServices.PushSubscription",
"Resource": "https://outlook.office.com/api/beta/me/mailfolders/Inbox/messages?$select=Subject,InternetMessageId",
"NotificationURL": "https://mywebapp.contoso.com/notifications",
"ChangeType": "Created,Deleted,Updated",
"ClientState": "Message unread"
}
然后通知将包含一个具有请求字段的 ResourceData
对象。
{
"value": [
{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "NjkyM0MwM0MtREJERi00MUY5LTlCMkQtQkRFOTREOTlEQ0EwX0ZDQkY1RTIwLUI1M0UtNENEQS05MEQyLTQyMkNBOUI4MkE1Mg==",
"SubscriptionExpirationDateTime": "2017-06-29T20:57:26.3294822Z",
"SequenceNumber": 3,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/beta/Users('1b1a2064-54a3-4f6e-b187-c1388c69fc0c@c4dd2789-1144-4832-bfaa-87f9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Message",
"@odata.id": "https://outlook.office.com/api/beta/Users('1b1a2064-54a3-4f6e-b187-c1388c69fc0c@c4dd2789-1144-4832-bfaa-87f9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')",
"@odata.etag": "W/\"CQAAABYAAABk23L+AKqTR5R9JLmwxOUMAAC131Ep\"",
"Id": "AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=",
"InternetMessageId": "<DM5PR20MB1417BF6C48A2C62E529021BF9EDD0@DM5PR20MB1417.namprd20.prod.outlook.com>",
"Subject": "Testing this"
}
}
]
}
如果 A 向 B 发送了一封电子邮件,然后您连接到每个人的 Microsoft Graph API,则存在一个问题:'internetMessageId' 在 A "Sent Emails" 中是相同的并且B "inbox" 但 Outlook Id ('Id') 不同。
--> 有没有办法在 Outlook Id 中解码/检测它是同一封电子邮件但从不同邮箱看到的事实?
背后有一个简单的问题:如果我为一家公司的所有员工邮箱订阅了 webhooks(比如说 1000 人),并且 1 个人向 "all company" 组发送了一封电子邮件。然后我的服务器将收到关于这封电子邮件的 1001 POST。由于通知参数中的唯一信息是 Outlook 邮件 ID,因此我无法检测到它是关于同一封邮件的。唯一的方法是对图 API 进行 1001 次调用以获取 internetMessageId,然后在此基础上进行过滤。它看起来真的很重而且很耗资源。有没有办法避免这种情况?无论是来自 webhook 端,来自通知内容,还是来自 Outlook Message Id 解码?
谢谢。
不,Id
是不透明的。它不是基于 Internet 消息 ID。
Microsoft Graph API 不支持向您的通知负载添加字段,但 Outlook REST API 本身支持。如果您直接使用 Outlook 端点 (https://outlook.office.com/api/
),则可以使用 $select
来获取通知负载中的其他字段,使用我们称为 "rich notifications".
您的订阅请求类似于:
{
"@odata.type": "#Microsoft.OutlookServices.PushSubscription",
"Resource": "https://outlook.office.com/api/beta/me/mailfolders/Inbox/messages?$select=Subject,InternetMessageId",
"NotificationURL": "https://mywebapp.contoso.com/notifications",
"ChangeType": "Created,Deleted,Updated",
"ClientState": "Message unread"
}
然后通知将包含一个具有请求字段的 ResourceData
对象。
{
"value": [
{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "NjkyM0MwM0MtREJERi00MUY5LTlCMkQtQkRFOTREOTlEQ0EwX0ZDQkY1RTIwLUI1M0UtNENEQS05MEQyLTQyMkNBOUI4MkE1Mg==",
"SubscriptionExpirationDateTime": "2017-06-29T20:57:26.3294822Z",
"SequenceNumber": 3,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/beta/Users('1b1a2064-54a3-4f6e-b187-c1388c69fc0c@c4dd2789-1144-4832-bfaa-87f9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Message",
"@odata.id": "https://outlook.office.com/api/beta/Users('1b1a2064-54a3-4f6e-b187-c1388c69fc0c@c4dd2789-1144-4832-bfaa-87f9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')",
"@odata.etag": "W/\"CQAAABYAAABk23L+AKqTR5R9JLmwxOUMAAC131Ep\"",
"Id": "AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=",
"InternetMessageId": "<DM5PR20MB1417BF6C48A2C62E529021BF9EDD0@DM5PR20MB1417.namprd20.prod.outlook.com>",
"Subject": "Testing this"
}
}
]
}