使用Microsoft Graph查找或验证用户可访问共享邮箱的实现方法
针对调用Microsoft Graph API实现共享邮箱发信的问题解答
问题1:获取用户有权限的共享邮箱列表
目前Microsoft Graph API暂无原生接口可直接拉取当前登录用户有权限访问的所有共享邮箱列表,相关功能需求仍在官方排期迭代中,可使用两类替代方案:
- 若你的应用申请了
Directory.Read.All等租户级读取权限,可以先拉取租户内所有recipientTypeDetails为SharedMailbox的邮箱地址列表,再逐个校验当前用户对该邮箱的操作权限,筛选后生成可选下拉列表。该方案权限要求较高,仅适合企业内部自用应用。 - 若无法拿到租户级权限,建议简化交互逻辑,直接提供输入框让用户手动填写共享邮箱地址,无需做下拉选择,可适配绝大多数使用场景。
问题2:无需发信验证共享邮箱发信权限
目前可通过以下无实际发信行为的方式验证权限,更推荐使用草稿校验方案:
- 草稿校验法:
- 先调用
GET /users/{用户输入的邮箱地址}?$select=recipientTypeDetails,首先验证该地址确实是当前租户内的共享邮箱,过滤无效的外部地址、个人邮箱地址。 - 再调用
POST /users/{用户输入的邮箱地址}/mailFolders/Drafts/messages接口,构造仅包含标题的最小有效邮件草稿,若接口返回201状态码,说明用户拥有该共享邮箱的操作权限,默认同时具备发信权限。验证完成后可主动调用删除接口移除刚创建的草稿,不会在用户邮箱内留存任何痕迹。
- 先调用
- 发信接口模拟法:
调用/me/sendMail接口,设置请求参数saveToSentItems为false,同时在请求头添加Prefer: return=minimal,构造的邮件填写不存在的测试收件人地址,若接口未返回403权限类报错,即可验证发信权限。该方案不会向任何地址实际投递邮件。
内容的提问来源于stack exchange,提问作者frankiesaurus
相关产品推荐
相关产品推荐

