2017-06-14 58 views
1

如果A將電子郵件發送給B,然後連接到每個人的Microsoft Graph API,則存在一個問題:「internetMessageId」在A「發送郵件」和B「收件箱」中是相同的,但是Outlook ID(' Id')是不同的。有沒有辦法在Microsoft Graph API中解密Outlook消息ID?

- >有沒有辦法在Outlook Id中解碼/檢測它是相同的電子郵件,但從不同的郵箱看到的事實?

這背後有一個簡單的問題:如果我爲公司的所有員工郵箱(讓我們說1000人)訂閱webhooks,並且1人向「all company」組發送電子郵件。然後我的服務器將收到有關此電子郵件的1001 POST。由於通知參數中唯一的信息是Outlook消息標識,因此我無法檢測到它全部是關於相同的消息。唯一的方法是對圖API進行1001次調用以獲取internetMessageId,然後在此基礎上進行篩選。它看起來非常重,耗費資源。有沒有辦法避免這種情況?無論是從webhook端,從通知內容還是從Outlook Message Id解碼?

謝謝。

回答

2

不,Id是不透明的。它不基於互聯網消息ID。

Microsoft Graph API不支持向通知有效內容添加字段,但Outlook REST API本身不支持。如果您直接使用Outlook端點(https://outlook.office.com/api/),則可以使用$select來獲取通知負載中的其他字段,並使用我們稱之爲「豐富通知」的功能。

文檔瀏覽:https://msdn.microsoft.com/en-us/office/office365/api/notify-rest-operations#subscribe-to-changes-in-my-mail-calendar-contacts-or-tasks

您的訂閱要求將類似於:

{ 
    "@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('[email protected]9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')", 
     "ResourceData": { 
     "@odata.type": "#Microsoft.OutlookServices.Message", 
     "@odata.id": "https://outlook.office.com/api/beta/Users('[email protected]9955f5ef6')/Messages('AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=')", 
     "@odata.etag": "W/\"CQAAABYAAABk23L+AKqTR5R9JLmwxOUMAAC131Ep\"", 
     "Id": "AAMkAGZjYmY1ZTIwLWI1M2UtNGNkYS05MGQyLTQyMmNhOWI4MmE1MgBGAAAAAACiItQsBUn9QIuhejMqYpj5BwBk23L_AKqTR5R9JLmwxOUMAAAAAAEMAABk23L_AKqTR5R9JLmwxOUMAAC1vTIkAAA=", 
     "InternetMessageId": "<[email protected]od.outlook.com>", 
     "Subject": "Testing this" 
     } 
    } 
    ] 
} 
+0

賈森,我試過但訂閱不被接受,導致400「壞資源」。查詢參數似乎不被支持,但將不勝感激!感謝您的支持,並讓我知道您是否有其他想法。 – Sybic2001

+0

啊,是的,我的錯誤。 Graph中的資源不支持'$ select'。但是,如果直接使用Outlook端點,則可以註冊包含此類數據的「豐富通知」。我會編輯我的答案。 –

+0

對不起,打擾你Jason,但一切工作完美的圖端點。如果我嘗試調用https://outlook.office.com/api/ ...端點,則會收到帶有無效標記的401。我不明白的是如何改變這種情況:我的應用在apps.dev.microsoft上註冊,並且我有管理員同意讓它訪問所有郵箱。因此,我沒有指定它是我將使用的圖形或Outlook休息端點。爲什麼令牌對於Outlook休息終點無效? – Sybic2001

相關問題