如何在Microsoft Graph中查询指定消息ID列表?
如何通过Microsoft Graph批量获取指定ID的邮件
问题背景
尝试用以下两种方式筛选指定ID的邮件均失败:
- 使用
in运算符的筛选请求:
GET https://graph.microsoft.com/beta/me/messages?$filter=id+in+('AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAUEQPKcAAA=','AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAT57zAUAAA=')
返回错误:
{ "error": { "code": "ErrorInvalidUrlQueryFilter", "message": "The query filter contains one or more invalid nodes." } }
- 使用
search.in()方法的筛选请求:
GET https://graph.microsoft.com/v1.0/me/messages?$filter=search.in(id,'AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAUEQPKcAAA=,AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAT57zAUAAA=',',')
返回错误:
{ "error": { "code": "BadRequest", "message": "Invalid filter clause", "innerError": { "date": "2023-01-12T21:34:46", "request-id": "993206ca-950d-4f0f-aee1-149219509b04", "client-request-id": "993206ca-950d-4f0f-aee1-149219509b04" } } }
原因说明
Microsoft Graph的邮件API不支持对id字段使用$filter筛选,不管是in运算符还是search.in()方法都不被允许,因此会返回筛选无效的错误。
正确解决方案
方案1:批量请求(Batch Request)
通过批量请求一次性获取多个指定ID的邮件,只需发送一个POST请求到Graph的批量端点:
- 请求地址:
POST https://graph.microsoft.com/v1.0/$batch - 请求头:
Content-Type: application/json - 请求体示例:
{ "requests": [ { "id": "1", "method": "GET", "url": "/me/messages/AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAUEQPKcAAA=" }, { "id": "2", "method": "GET", "url": "/me/messages/AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAEMAAAiIsqMbYjsT5e-T7KzowPTAAT57zAUAAA=" } ] }
每个请求的id需唯一,响应会按对应id返回每个邮件的详情。
方案2:逐个请求(适合少量ID)
直接对每个邮件ID单独发送GET请求:
GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
可通过并行发送多个请求来提升效率。
内容的提问来源于stack exchange,提问作者ADJenks
相关产品推荐
相关产品推荐

