2017-10-09 41 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