如何基于分类通过Graph API获取Outlook邮件
基于Outlook分类筛选Graph API获取的邮件
要替换原有isRead筛选逻辑,改用Outlook分类筛选邮件,核心是利用Graph API支持的OData数组筛选语法,检查邮件的categories数组是否包含目标分类。
核心筛选规则
- 筛选包含指定分类的邮件:
categories/any(c:c eq '你的分类名称') - 筛选不包含指定分类的邮件:
not categories/any(c:c eq '你的分类名称') - 多分类组合筛选(满足任一分类):
categories/any(c:c eq '分类A') or categories/any(c:c eq '分类B')
修改后的代码示例
假设按以下业务逻辑设置分类筛选:
- 非归档流(
isArchiveFlow=false):筛选带有"待处理"分类的邮件 - 归档流(
isArchiveFlow=true):若为信息邮箱(isInfoMailBox=true)则不设筛选,否则筛选带有"已归档"分类的邮件
修改后的代码如下:
// 定义目标分类名称,可根据业务需求自由调整 String pendingCategory = "待处理"; String archivedCategory = "已归档"; String filterCondition = String.format("categories/any(c:c eq '%s')", pendingCategory); if (isArchiveFlow) { filterCondition = isInfoMailBox ? "" : String.format("categories/any(c:c eq '%s')", archivedCategory); } return _appClient.users(o365Mailbox) .mailFolders("inbox") .messages() .buildRequest() .select("from,isRead,receivedDateTime,sentDateTime,subject,body,bodyPreview,flag,toRecipients,ccRecipients,bccRecipients,sender,hasAttachments,categories") // 建议加入categories字段,方便验证筛选结果 .filter(filterCondition) .top(999) // 注意:Graph API的$top参数最大值为999,原代码1000会触发报错 .orderBy("receivedDateTime ASC") .get();
注意事项
- 分类名称大小写敏感:必须与Outlook中设置的分类名称完全匹配(包括大小写、空格)
- $top参数限制:严格遵循Graph API的参数规则,最大值设为999
- 可选返回categories字段:在
select中加入categories,可直接在返回结果中查看邮件的分类标签,快速验证筛选逻辑是否生效 - 空筛选场景:当
isInfoMailBox=true时,filterCondition设为空字符串,将返回收件箱所有邮件
内容的提问来源于stack exchange,提问作者Mani Bellamkonda
相关产品推荐
相关产品推荐

