如何通过Microsoft Graph API筛选含PidTagDeferredSendTime的邮件?
解决Microsoft Graph API筛选含PidTagDeferredSendTime属性的邮件问题
正确筛选请求格式
要获取所有包含PidTagDeferredSendTime(属性ID:0x3FEF,类型:SystemTime)的邮件,使用以下请求即可:
GET https://graph.microsoft.com/v1.0/me/messages?$filter=singleValueExtendedProperties/Any(ep: ep/id eq 'SystemTime 0x3FEF')&$expand=singleValueExtendedProperties($filter=id eq 'SystemTime 0x3FEF')
之前请求失败的原因
- 时间范围筛选失效:Graph API不支持直接对
singleValueExtendedProperties的时间类型value进行ge这类范围比较,扩展属性的value在筛选阶段被当作字符串处理,无法自动转换为时间类型做逻辑判断。 - contains函数限制:对扩展属性的
value使用contains函数的场景支持有限,部分情况下会触发API筛选规则限制导致失败。 - 属性ID格式错误:第三个请求中错误地将属性ID写成
String {SystemTime 0x3FEF},正确格式应为SystemTime 0x3FEF,无需额外包裹。
按时间筛选的替代方案
如果需要按PidTagDeferredSendTime的时间值过滤,由于API端不支持直接筛选,可按以下步骤操作:
- 先用上述正确请求获取所有包含该属性的邮件。
- 在客户端对返回结果中的
singleValueExtendedProperties.value字段进行时间解析和过滤(例如转换为DateTime类型后对比时间范围)。
权限注意事项
确保调用API的应用已获得Mail.Read权限(委派权限或应用权限均可)。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

