Microsoft Graph API获取昨日收件总数异常问题求助
获取指定邮箱昨日邮件总数的正确Graph API用法
问题分析
你之前的两个请求都存在语法或逻辑错误,导致无法正确过滤昨日邮件:
- 第一个请求用
eq匹配日期,而ReceivedDateTime是带时间戳的字段,eq只能匹配精确到秒的特定时间,无法覆盖全天;同时URI里有多余的&?,还存在邮箱地址拼写错误。 - 第二个请求的URI存在多余的
&?,且缺少必要的请求头,导致search和$count无法协同生效。
正确解决方案
方法1:用$filter指定时间范围
通过ge(大于等于)和lt(小于)定义昨日UTC时间的完整范围,同时修正URI语法并添加必要请求头:
请求URI:
https://graph.microsoft.com/v1.0/users/mailbox@microsoft.com/messages?$filter=ReceivedDateTime ge {{formatDateTime(addDays(utcNow(),-1),'yyyy-MM-ddT00:00:00Z')}} and ReceivedDateTime lt {{formatDateTime(utcNow(),'yyyy-MM-ddT00:00:00Z')}}&$count=true
必须添加请求头:
ConsistencyLevel: eventual
这个范围会匹配从昨日0点UTC到今日0点UTC之间收到的所有邮件,完全覆盖昨日时段。
方法2:用search参数简化过滤
修正search参数的语法,移除多余的URI符号,同样添加必要请求头:
请求URI:
https://graph.microsoft.com/v1.0/users/mailbox@microsoft.com/messages?$count=true&search=received:yesterday
必须添加请求头:
ConsistencyLevel: eventual
received:yesterday是Graph内置的搜索语法,会自动匹配昨日收到的邮件,无需手动计算时间范围。
核心注意点
- 两种方法都必须添加
ConsistencyLevel: eventual请求头,否则$count=true无法返回过滤后的正确总数,只会返回所有邮件的数量。 - 确保你的账号或应用已拥有
Mail.Read权限,否则会触发权限错误。
内容的提问来源于stack exchange,提问作者arealhobo
相关产品推荐
相关产品推荐

