如何在Microsoft Graph API中同时按收件人及已读状态筛选邮件?
解决Microsoft Graph API同时筛选未读且指定收件人邮件的问题
方法一:用
$filter结合集合操作符直接筛选toRecipients是数组属性,你可以用any()操作符匹配目标收件人邮箱,同时加上isRead eq false的过滤条件,完全不用依赖$search,直接就能拿到结果。示例请求如下:GET https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages?$filter=isRead eq false and toRecipients/any(r: r/emailAddress/address eq 'xx@yy.com')如果需要同时覆盖抄送、密送的收件人,直接扩展过滤条件就行:
GET https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages?$filter=isRead eq false and (toRecipients/any(r: r/emailAddress/address eq 'xx@yy.com') or ccRecipients/any(r: r/emailAddress/address eq 'xx@yy.com') or bccRecipients/any(r: r/emailAddress/address eq 'xx@yy.com'))方法二:先搜指定收件人邮件,再本地筛未读
要是你需要用$search的全文检索能力(比如匹配收件人别名、昵称这类场景),可以先调用$search拿到所有发给xx@yy.com的邮件,然后在自己的代码里筛选出未读的条目。示例请求:GET https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages?$search="to:xx@yy.com"&$select=isRead,subject,receivedDateTime,toRecipients注意:这种方式要处理分页问题,如果结果多,得遍历完所有分页结果再做本地过滤。
额外提醒
- 用方法一时,确保你的应用有足够权限(比如
Mail.Read),而且Graph API版本在v1.0及以上(现在主流版本都支持集合操作符)。 - 如果要查的是共享邮箱或其他用户的邮箱,把请求里的
me换成users/{user-id}或者对应的文件夹路径就行。
内容的提问来源于stack exchange,提问作者mdk
相关产品推荐
相关产品推荐

