2017-10-09 48 views
0

我在Microsoft Graph Explorer中使用https://graph.microsoft.com/v1.0/me/messages?$filter=isRead eq false來返回我未讀電子郵件的列表。我的目標是在我的網站上有一個簡單的HUD,向任何登錄用戶顯示通知他們在Outlook中等待他們的未讀郵件數量。Microsoft Graph可以過濾垃圾郵件嗎?

問題是,除了我的合法未讀電子郵件以外,還會在我的垃圾郵件文件夾中返回所有未讀電子郵件。我想過濾出垃圾郵件,但圖形不給我一個系統地爲所有用戶完成此任務的方法。

所有電子郵件都有一個parentFolderID,Graph表示我的垃圾郵件文件夾中的電子郵件有"parentFolderId": "AQMkAGFjOGFkNWM2LTcxMjQtND..."。這意味着我可以過濾掉我自己的垃圾郵件,但這對我的其他用戶沒有幫助,因爲他們每個垃圾郵件都有獨特的parentFolderID

我可以爲自己創建一個將垃圾郵件標記爲已讀的規則,但我不能指望我的用戶做類似的事情。

有關如何爲所有用戶篩選垃圾郵件的想法?

回答

1

我不認爲對Graph API的單個查詢可以解決這個問題,但是您可以用一點邏輯來解決這個問題。

  1. 列出所有mailFolders

    https://graph.microsoft.com/v1.0/me/mailFolders

  2. 找到 '垃圾郵件' 文件夾

var json = ` 
 
{ 
 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('48d31887-5fad-4d73-a9f5-3c356e68a038')/mailFolders", 
 
    "value": [ 
 
     { 
 
      "id": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEkAAA=", 
 
      "displayName": "Junk Email", 
 
      "parentFolderId": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEIAAA=", 
 
      "childFolderCount": 0, 
 
      "unreadItemCount": 0, 
 
      "totalItemCount": 0 
 
     } 
 
    ] 
 
}` 
 

 
var obj = JSON.parse(json) 
 

 
for(var folder in obj.value) 
 
{ 
 
    if (obj.value[folder].displayName == 'Junk Email') 
 
    { 
 
    document.write(obj.value[folder].id) 
 
    break 
 
    } 
 
}

  1. 按照您的描述過濾掉該文件夾中的郵件,每個用戶都是唯一的郵件。
+0

這使我在正確的道路上。收件箱文件夾的「unreadItemCount」是我實際需要獲得的。 –

1

僅從我的收件箱中獲得未讀郵件的數量,我最終使用:

https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'

返回:

{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('ed313cf6-f369-45c6-94b2-48bbb3589788')/mailFolders", "value": [ { "id": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZpAAA=", "displayName": "Inbox", "parentFolderId": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZmAAA=", "childFolderCount": 14, "unreadItemCount": 1, "totalItemCount": 25 } ] }

數據我之後在"unreadItemCount"。感謝Shawn Tabrizi爲我設置了正確的路線/me/mailFolders

請注意,您目前無法通過parentFolderId過濾/me/messages,因此如果您想從/me/messages獲取任何郵件內容,您需要運行Shawn Tabrizi建議的自定義過濾代碼。

{ "error": { "code": "ErrorInvalidProperty", "message": "The property 'ParentFolderId' does not support filtering.", "innerError": { "request-id": "526bafdd-d8ac-47f2-be1f-656b3b93da35", "date": "2017-10-11T15:45:33" } } }

0

你可以運行兩個單獨的查詢,以獲得在收件箱文件夾中的所有新郵件,並對其內容的數據。

  1. 首先運行:

https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'

得到僅在收件箱文件夾的詳細信息。

`{ 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders", 
    "value": [ 
     { 
      "id": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA=", 
      "displayName": "Inbox", 
      "parentFolderId": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEIAAA=", 
      "childFolderCount": 0, 
      "unreadItemCount": 1, 
      "totalItemCount": 0 
     } 
    ] 
}` 
  • 爲了得到內容數據,需要的id值:

    $filter=displayName eq 'Inbox'displayName等於(eq) '收件箱'

    這將返回過濾器的文件夾以形成第二個查詢的一部分。

  • 添加&$count=true到最後獲得未讀郵件的數量在收件箱:

    第二個查詢:

    https://graph.microsoft.com/v1.0/me/mailFolders/{ Inbox id goes here }/messages?$filter=isRead eq false&$count=true

    此過濾未讀(isRead eq false)從收件箱文件夾,然後返回例如:

    `{ 
        "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders('AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA%3D')/messages", 
    "@odata.count": 1, 
        "value": [ 
         { 
          "@odata.etag": "W/\"CQAAABYAAACTj9cyjezTSYJYfMfg3p5fAACWjeF5\"", 
          "receivedDateTime": "2018-01-29T11:32:40Z", 
          "sentDateTime": "2018-01-29T11:32:37Z", 
          "subject": "New Mail", 
          "bodyPreview": "New email body for email preview", 
          "isRead": false, 
          "isDraft": false, 
          -- More properties are returned. Shortened response for brevity -- 
    

    `

    電子郵件內容數據通過value進行了加密。

    通過odata.count訪問收件箱文件夾中未讀電子郵件的數量。

    請參閱Microsof Graph - List messages in a specified folder in the mailbox