You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于分类通过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();

注意事项

  1. 分类名称大小写敏感:必须与Outlook中设置的分类名称完全匹配(包括大小写、空格)
  2. $top参数限制:严格遵循Graph API的参数规则,最大值设为999
  3. 可选返回categories字段:在select中加入categories,可直接在返回结果中查看邮件的分类标签,快速验证筛选逻辑是否生效
  4. 空筛选场景:当isInfoMailBox=true时,filterCondition设为空字符串,将返回收件箱所有邮件

内容的提问来源于stack exchange,提问作者Mani Bellamkonda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:43:24