如何使用AAD Graph API通过个人Outlook账户发送邮件
问题诊断
你的问题核心是AAD用户账户未配置激活的Exchange Online邮箱,导致Microsoft Graph无法找到对应的邮箱资源,所以Mail字段为空,调用SendMail接口返回ResourcesNotFound错误。
解决方案步骤
确认并分配Exchange Online许可证
- 登录Azure门户,进入「Azure Active Directory」→「用户」,找到目标用户。
- 切换到「许可证和应用」选项卡,检查是否已分配包含Exchange Online的Office 365许可证(如Office 365 E3/E5、Exchange Online Plan 1/2等)。
- 若未分配,点击「分配许可证」,选择合适的许可证完成分配。
验证邮箱激活状态
许可证分配后需等待数分钟同步配置,可通过两种方式验证:- 登录Outlook网页版(outlook.office.com),能正常进入邮箱即表示激活成功。
- 调用Graph API的
GET /users/{userId}/mailboxSettings接口,能返回有效数据则说明邮箱就绪。
代码优化建议
- 获取用户信息时指定所需字段,减少冗余请求:
var user = await graphServiceClient.Users[userId] .GetAsync(requestConfiguration => requestConfiguration.QueryParameters.Select = new[] { "id", "displayName", "mail", "mailboxSettings" }); - 提前判断
Mail字段是否为空,避免后续无效操作:if (string.IsNullOrEmpty(user.Mail)) { Console.WriteLine("用户未配置邮箱,请检查许可证分配情况"); return; }
- 获取用户信息时指定所需字段,减少冗余请求:
补充说明
使用Client Secret Credential(应用权限)调用SendMail接口时,需确保应用已在Azure AD应用注册中添加并授予Mail.Send应用权限(该权限已包含在https://graph.microsoft.com/.default范围内,前提是你已完成权限授予操作)。若权限未配置也可能引发类似错误,但你的场景更倾向于邮箱未激活。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

