如何从Azure Graph /USERS API结果中筛选启用邮箱的用户
Azure Graph /users 接口筛选已启用邮箱用户的实现方法
通用版Azure Graph的/users端点确实没有直接暴露RecipientTypeDetail这个Exchange侧的属性作为原生筛选参数,你可以根据自己的精度需求选以下方案实现筛选:
- 轻量快速筛选(精度一般)
直接通过接口自带的mail、accountEnabled属性做过滤,适合对匹配精度要求不高、租户内没有大量邮件联系人/同步用户的场景,请求示例:
这个方案的缺陷是会混入未启用真实邮箱、仅手动填充了mail属性的目录对象,结果存在误差。GET https://graph.microsoft.com/v1.0/users?$filter=mail ne null and accountEnabled eq true&$select=id,displayName,mail,userPrincipalName - 精准筛选(和RecipientTypeDetail=UserMailbox结果完全对齐)
通过proxyAddresses属性做条件判断:所有启用了Exchange邮箱的用户,proxyAddresses集合内必然存在以SMTP:为前缀的主邮箱地址条目,筛选时直接匹配这个规则即可,请求示例:
这个方案在纯云租户、混合部署租户下都能准确返回所有已启用邮箱的用户,不会混入邮件联系人、未开邮箱的普通目录用户。GET https://graph.microsoft.com/v1.0/users?$filter=accountEnabled eq true and proxyAddresses/any(p:startsWith(p,'SMTP:'))&$select=id,displayName,mail,userPrincipalName,proxyAddresses - 原生RecipientTypeDetail筛选
如果你不需要强制使用通用目录/users端点,可以直接调用Exchange Online对应的Graph管理接口,这类接口的返回字段原生包含RecipientTypeDetail属性,支持直接按该字段值做等值筛选,不需要额外做属性规则判断。
注意:使用
proxyAddresses做筛选时,注意前缀SMTP是全大写的,小写smtp:开头的条目是用户的辅助别名地址,不能作为主邮箱存在的判断依据。
内容的提问来源于stack exchange,提问作者o365_Dev
相关产品推荐
相关产品推荐

