如何通过Microsoft Graph API统计发送给自己的Outlook邮件数量
如何通过Microsoft Graph API的GET请求统计发送给自己的Outlook邮件数量
你尝试过的不支持方法
组合
$search与$filter:f"{BASE_URL}/users/{email}/messages?$filter=from/emailAddress/address eq '{email}'&$search=\"cc:{email}\""原因:Graph API不允许同时使用
$search和$filter参数。组合
$search与$count:f"{BASE_URL}/users/{email}/messages?$search=\"cc:{email}\"&$count=true"原因:缺少必要的请求头
ConsistencyLevel: eventual,无法返回正确计数。组合
$filter与复杂集合:f"{BASE_URL}/users/{email}/messages?$filter=toRecipients/any(e:e/emailAddress/address eq '{email}')"原因:仅请求邮件列表,未开启计数参数和对应请求头,无法直接获取数量。
正确解决方案
要直接获取发送给自己(含收件人、抄送人)的邮件数量,无需拉取全部邮件详情,可按以下步骤实现:
1. 构造过滤条件
同时匹配收件人、抄送人中包含自身邮箱的邮件,过滤规则如下:
$filter=toRecipients/any(r:r/emailAddress/address eq '{email}') or ccRecipients/any(r:r/emailAddress/address eq '{email}')
2. 配置计数参数与请求头
- URL中添加
$count=true,指定返回邮件总数 - 必须设置请求头
ConsistencyLevel: eventual,这是使用复杂过滤或$count的强制要求
3. 完整请求示例
import requests BASE_URL = "https://graph.microsoft.com/v1.0" email = "your-email@example.com" access_token = "your-access-token" # 构造请求URL,仅请求ID字段以最小化响应数据 url = f"{BASE_URL}/users/{email}/messages?$filter=toRecipients/any(r:r/emailAddress/address eq '{email}') or ccRecipients/any(r:r/emailAddress/address eq '{email}')&$count=true&$select=id" headers = { "Authorization": f"Bearer {access_token}", "ConsistencyLevel": "eventual" } response = requests.get(url, headers=headers) if response.status_code == 200: # 从响应头获取总数 total_count = response.headers.get("@odata.count") print(f"发送给自己的邮件总数:{total_count}")
注意事项
- 若仅需统计收件人为自己的邮件,可删除过滤条件中的
or ccRecipients/any(...)部分 - 确保应用已获取
Mail.Read权限(委托或应用权限均可) - 即使邮件数量达数千封,该请求仍能高效返回计数,无需分页拉取所有邮件
内容的提问来源于stack exchange,提问作者user14912884
相关产品推荐
相关产品推荐

