如何使用Microsoft Graph API多条件查询邮件?
解决Microsoft Graph API多条件筛选邮件的问题
原查询的问题分析
第一个$filter查询的错误
- 参数名写错:把
$filter写成了$(filter,多了个左括号,导致参数无法被API识别 toRecipients是对象数组(每个元素包含emailAddress.address字段),不能直接用in匹配字符串,必须用any()方法遍历数组匹配邮箱地址
第二个$search查询的错误
- 时间范围写法不符合
$search语法规则,received的范围需用..连接,而非>=和<= - 部分场景下需确保邮箱搜索功能已启用,且请求权限满足要求
正确的查询写法
写法一:使用$filter精准筛选
GET https://graph.microsoft.com/v1.0/me/messages?$filter=ReceivedDateTime ge 2023-06-01T00:00:00Z and ReceivedDateTime le 2023-06-19T23:59:59Z and toRecipients/any(r: r/emailAddress/address eq 'c.smith@companyname.com')
注意点:
- 时间格式加上时区标识
Z(UTC时间),避免时区差异导致筛选结果偏差 toRecipients/any(r: r/emailAddress/address eq 'xxx')是遍历收件人数组、匹配指定邮箱的正确语法
写法二:使用$search模糊搜索(适合灵活场景)
GET https://graph.microsoft.com/v1.0/me/messages?$search="to:c.smith@companyname.com received:2023-06-01..2023-06-19"
注意点:
$search的时间范围用起始日期..结束日期格式- 使用
$search需请求Mail.Read权限,部分租户可能需开启邮箱高级搜索功能
额外注意事项
- 若返回结果为空,先确认目标时间段内确实存在发送到该邮箱的邮件
- 检查请求权限:至少需要
Mail.ReadBasic或Mail.Read权限 - 结果过多时,可加
$top参数控制每页返回数量,比如&$top=50
内容的提问来源于stack exchange,提问作者Chiril
相关产品推荐
相关产品推荐

