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

如何在Graph API中区分已发送与已接收的邮件消息

基于Graph API区分已发送/已接收邮件的实现方案

方案1:通过邮件固有属性直接判断(支持全量邮件分类)

不需要限定查询范围,直接通过邮件核心字段匹配即可完成分类:

  • 已发送邮件判断:sender 字段对应的邮箱地址属于当前认证账号的邮箱别名列表,同时 isDraft 字段为false。如果是共享邮箱场景,额外校验 from 字段和当前操作邮箱的归属关系即可。
  • 已接收邮件判断:toRecipients、ccRecipients、bccRecipients 三个字段中至少有一个包含当前认证账号的邮箱地址,同时该邮件不属于已发送、草稿、垃圾邮件、已删除等特殊分类。

如果是企业域内多别名账号,需要先拉取当前账号的所有邮箱别名做匹配,避免漏判发送给自己的测试邮件这类特殊场景

方案2:通过限定查询文件夹范围直接分类(实现更简单,性能更高)

直接调用对应系统文件夹的查询接口,返回结果天然符合分类要求,是绝大多数场景的最优选择:

  • 查询已发送邮件:直接调用/me/mailFolders('sentItems')/messages接口,返回的所有结果都是原生已发送邮件
  • 查询已接收邮件:直接调用/me/mailFolders('inbox')/messages接口,返回的所有结果都是收件箱内的已接收邮件;如果需要包含所有归档的已接收邮件,可以排除sentItems、drafts、junkemail、deleteditems四个系统文件夹后查询所有邮件

接口调用示例

HTTP请求示例:

# 已发送邮件查询请求
GET https://graph.microsoft.com/v1.0/me/mailFolders('sentItems')/messages

# 已接收邮件查询请求
GET https://graph.microsoft.com/v1.0/me/mailFolders('inbox')/messages

C# Graph SDK调用示例:

// 查询已发送邮件
var sentMessages = await graphClient.Me.MailFolders["sentItems"].Messages
    .Request()
    .GetAsync();

// 查询收件箱已接收邮件
var receivedMessages = await graphClient.Me.MailFolders["inbox"].Messages
    .Request()
    .GetAsync();

方案2适合绝大多数常规业务场景,实现成本最低,查询速度最快;如果你的业务需要自定义分类逻辑,比如把用户自己移到自定义文件夹的邮件也做分类,再用方案1的属性判断逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:06:03