开发调用Microsoft Graph发邮件的多租户ASP.NET Web API问题咨询
多租户ASP.NET应用调用Microsoft Graph代发邮件问题解答
问题1:若要支持不同租户的用户使用,我是否需要注册类型为「Multi-tenant」的Azure App?
- 是,必须注册多租户类型的Azure AD应用。如果使用单租户配置,仅有你所属Azure租户内的用户可以完成授权流程,其他租户的用户登录时会直接触发「用户不在当前租户内」的报错,无法正常使用功能。
问题2:要实现代用户发送邮件的能力,需要申请哪些scope/权限?
- 你现有配置的
offline_access、user.read、mail.read保留的基础上,额外增加Mail.Send权限即可。 - 补充提示:你当前方案中直接存储Access Token的方式存在有效期问题(Access Token默认有效期仅1小时),保留
offline_access权限后可同时获取Refresh Token存储,每次发信前如果Access Token过期,可通过Refresh Token刷新获取有效凭证,无需用户重复授权。
问题3:Azure侧我需要配置Delegated permissions(委托权限)还是Application permissions(应用程序权限)?
- 配置委托权限即可。你的场景是用户主动登录授权后,应用代当前登录用户执行发信操作,完全符合委托权限的使用场景,权限范围仅对授权用户生效,安全可控。
- 应用程序权限适用于无用户登录的服务后台场景,需要全局管理员授权,且默认拥有租户内所有用户邮箱的操作权限,权限等级过高,不适用于你的业务场景。
问题4:如何确保已发送的邮件同步保存到对应用户的Outlook「Sent Items」文件夹中?
- 调用Microsoft Graph的
sendMail接口时,在请求体中显式指定saveToSentItems参数为true即可。该参数默认值也为true,显式指定可以避免接口行为变更带来的异常。示例请求结构参考:
{ "message": { "subject": "邮件主题", "body": { "contentType": "Text", "content": "邮件正文" }, "toRecipients": [ { "emailAddress": { "address": "收件人邮箱" } } ] }, "saveToSentItems": true }
内容的提问来源于stack exchange,提问作者Naupad Doshi
相关产品推荐
相关产品推荐

