【问题标题】:Can Microsoft Graph filter out Junk Email?Microsoft Graph 可以过滤掉垃圾邮件吗?
【发布时间】:2017-10-09 16:18:42
【问题描述】:

我在 Microsoft Graph Explorer 中使用 https://graph.microsoft.com/v1.0/me/messages?$filter=isRead eq false 来返回我的未读电子邮件列表。我的目标是在我的网站上设置一个简单的 HUD,向任何已登录的用户显示他们在 Outlook 中等待他们的未读邮件的通知。

问题是这会返回我的垃圾邮件文件夹中的所有未读电子邮件,以及我的合法未读电子邮件。我想过滤掉垃圾邮件,但图表并没有为我提供一种为所有用户系统地完成此操作的方法。

所有电子邮件都有parentFolderID,Graph 说我的垃圾邮件文件夹中的电子邮件有"parentFolderId": "AQMkAGFjOGFkNWM2LTcxMjQtND..."。这意味着我可以过滤掉自己的垃圾邮件,但这对我的其他用户没有帮助,因为他们每个人的垃圾邮件都会有一个唯一的 parentFolderID

我可以为自己创建一个将垃圾邮件标记为已读的规则,但我不能指望我的用户会这样做。

关于如何为所有用户过滤垃圾邮件有什么想法吗?

【问题讨论】:

    标签: microsoft-graph-api


    【解决方案1】:

    我不认为对 Graph API 的单个查询可以解决这个问题,但是您可以通过一些逻辑进行多次调用来解决这个问题。

    1. 列出所有邮件文件夹

      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. 按照您的描述从该文件夹中过滤掉邮件,每个用户都是唯一的。

    【讨论】:

    • 这让我走上了正确的道路。收件箱文件夹的“unreadItemCount”是我真正需要得到的。
    【解决方案2】:

    为了只从我的收件箱中获取未读邮件的数量,我最终使用了:

    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" } } }

    【讨论】:

      【解决方案3】:

      您可以运行两个单独的查询来获取收件箱文件夹中的所有新电子邮件及其内容数据。

      1. 首次运行:

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

      仅获取有关收件箱文件夹的详细信息。

      $filter=displayName eq 'Inbox' 过滤 displayName 等于 (eq) '收件箱'的文件夹

      这会返回:

      `{
          "@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
              }
          ]
      }`
      
      1. 要获取内容数据,您需要id 值来构成第二个查询的一部分。

      在末尾添加&$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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-17
        • 2010-09-21
        • 2012-05-27
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2011-09-18
        相关资源
        最近更新 更多