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

使用Graph API区分Office 365共享邮箱与普通用户

没问题!用Microsoft Graph API完全可以区分Office 365里的共享邮箱和普通用户,还能同时筛选出带特定许可证的用户以及无许可证的共享邮箱。我给你拆解具体实现方法:

核心区分字段

这几个字段是判断的关键,组合使用能精准区分:

  • mailboxSettings.mailboxType:最可靠的区分标识。共享邮箱的该值固定为Shared,普通用户邮箱则为User;另外会议室邮箱是Room、设备邮箱是Equipment,也能通过这个字段一并排除。
  • assignedLicenses:共享邮箱默认不需要许可证,所以它的assignedLicenses数组是空的;而普通用户如果持有许可证,这个数组里会包含对应的SKU信息。
  • userType:普通用户通常是Member(组织内正式用户)或Guest(外部访客),部分共享邮箱的userType可能也会被设为Member,所以这个字段单独用不够准确,建议和mailboxSettings.mailboxType配合使用。
实战查询示例

如果你要同步拥有特定许可证的普通用户 + 所有共享邮箱,可以直接用这个Graph API请求:

GET https://graph.microsoft.com/v1.0/users?$filter=(userType eq 'Member' and assignedLicenses/any(x:x/skuId eq 'YOUR_SKU_ID')) or (mailboxSettings/mailboxType eq 'Shared')&$select=id,displayName,mail,assignedLicenses,mailboxSettings

我给你拆解下关键逻辑:

  • userType eq 'Member':筛选组织内的正式普通用户,排除外部访客账号
  • assignedLicenses/any(x:x/skuId eq 'YOUR_SKU_ID'):把YOUR_SKU_ID替换成你要筛选的许可证SKU编号,就能精准定位持有该许可证的用户
  • mailboxSettings/mailboxType eq 'Shared':获取所有共享邮箱
  • $select:指定返回你需要的字段,减少冗余数据,提升请求效率
注意事项
  • 权限要求:确保你的应用拥有User.Read.All或Directory.Read.All的应用权限(批量同步场景下,委托权限可能不够用)
  • 特殊场景:如果需要严格筛选无许可证的共享邮箱,可以在条件里追加and assignedLicenses/$count eq 0,变成(mailboxSettings/mailboxType eq 'Shared' and assignedLicenses/$count eq 0)
  • 分页处理:如果结果数量超过1000条,记得处理Graph API的分页逻辑,通过响应里的@odata.nextLink获取下一页数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:50