You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft Graph API过滤邮件返回无效JSON问题咨询

Microsoft Graph API 获取邮件时响应混入 ErrorItemNotFound 错误的问题

问题详情

调用Microsoft Graph API获取指定时间范围内修改的非草稿邮件(排除特定文件夹),请求URL如下:

https://graph.microsoft.com/v1.0/users/59687355-748d-4d9c-aa4c-d0c1d2086eff/messages/?$select=bccRecipients,categories,ccRecipients,changeKey,conversationId,conversationIndex,createdDateTime,flag,from,hasAttachments,id,importance,inferenceClassification,internetMessageId,isDeliveryReceiptRequested,isRead,isReadReceiptRequested,lastModifiedDateTime,parentFolderId,receivedDateTime,replyTo,sender,sentDateTime,subject,toRecipients,webLink&$filter=lastModifiedDateTime gt 2022-10-07T10:49:27Z and lastModifiedDateTime lt 2022-10-14T10:49:27Z and isDraft eq false and parentFolderId ne 'conversationhistory' and parentFolderId ne 'junkemail' and parentFolderId ne 'outbox' and parentFolderId ne 'recoverableitemsdeletions' and parentFolderId ne 'scheduled' and parentFolderId ne 'searchfolders'&$orderby=lastModifiedDateTime asc&$top=100

多数请求成功,但偶尔会返回格式异常的响应——在value数组中混入错误条目:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('59687355-748d-4d9c-aa4c-d0c1d2086eff')/messages(bccRecipients,categories,ccRecipients,changeKey,conversationId,conversationIndex,createdDateTime,flag,from,hasAttachments,id,importance,inferenceClassification,internetMessageId,isDeliveryReceiptRequested,isRead,isReadReceiptRequested,lastModifiedDateTime,parentFolderId,receivedDateTime,replyTo,sender,sentDateTime,subject,toRecipients,webLink)",
  "value": [
    {
      "@odata.etag": "W/\"CQAAABYAAABsk7XI0Ba5RLTZiPmnkZbZAAFYXkB3\"",
      "id": "AAMkADg5NjZhMjkzLWIyODQtNDFkNy1hOWMzLTBhODVlZGFjMGIyMQBGAAAAAADk-kLFG1rtR5MSTyO-jKygBwBsk7XI0Ba5RLTZiPmnkZbZAAAAAAEJAABsk7XI0Ba5RLTZiPmnkZbZAAFZu3S4AAA=",
      ...
    },
    {
      "@odata.etag": "W/\"CQAAABYAAABsk7XI0Ba5RLTZiPmnkZbZAAFYXkCB\"",
      "id": "AAMkADg5NjZhMjkzLWIyODQtNDFkNy1hOWMzLTBhODVlZGFjMGIyMQBGAAAAAADk-kLFG1rtR5MSTyO-jKygBwBsk7XI0Ba5RLTZiPmnkZbZAAAAAAEKAABsk7XI0Ba5RLTZiPmnkZbZAAFZuvoVAAA=",
      ...
    },
    {
      "@odata.etag": "W/\"CQAAABYAAABsk7XI0Ba5RLTZiPmnkZbZAAFYXkCJ\"",
      "id": "AAMkADg5NjZhMjkzLWIyODQtNDFkNy1hOWMzLTBhODVlZGFjMGIyMQBGAAAAAADk-kLFG1rtR5MSTyO-jKygBwBsk7XI0Ba5RLTZiPmnkZbZAAAAAAEKAABsk7XI0Ba5RLTZiPmnkZbZAAFZuvoWAAA=",
      ...
    },
    {
      "error": {
        "code": "ErrorItemNotFound",
        "message": "The specified object was not found in the store., The process failed to get the correct properties."
      }
    }
  ]
}

重试请求通常能解决问题,推测原因是Graph API先获取匹配查询的ID列表,再逐个获取记录组装响应,期间邮件可能被移动、删除或ID变更,导致无法找到对应条目,错误被混入响应中。

解决方案

临时处理方案

  • 实现重试机制:针对此类包含错误条目的响应,触发指数退避重试(比如最多重试3次,每次间隔1s、2s、4s),利用重试后数据一致性恢复的特性解决问题。
  • 客户端过滤错误条目:在解析响应时,遍历value数组,过滤掉包含error字段的条目,只处理正常的邮件数据,避免格式错误影响业务逻辑。
  • 缩小单次查询范围:减小$top参数的值(比如从100改为50),减少单次请求处理的邮件数量;或者拆分时间范围,分多次请求获取数据,降低出现一致性问题的概率。

长期优化与官方支持

  • 使用Delta查询:改用/users/{id}/messages/delta端点跟踪邮件变更,Delta查询专门用于增量获取资源变更,能自动处理资源移动、删除等场景,从根源减少此类一致性问题。
  • 提交官方支持工单:如果问题频繁出现,收集请求ID、响应时间、错误详情等信息,提交给微软技术支持,确认是否为已知Bug,推动官方修复。

内容的提问来源于stack exchange,提问作者glevine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:15:29