使用JavaScript发送邮件的SharePoint权限问题及实现代码
针对你使用JavaScript调用SharePoint REST API SP.Utilities.Utility.SendEmail 发送邮件的场景,我整理了所需的权限要求,结合你的代码场景细分如下:
核心权限基础
调用这个API的身份(不管是当前登录用户还是应用程序),必须具备发送电子邮件的权限能力,这是触发邮件发送的前提。
按调用场景细分权限
1. 当前登录用户上下文(你的代码所属场景)
你代码里使用了_spPageContextInfo获取站点信息,属于以当前登录用户身份发起请求,此时:
- 权限级别要求:用户需要被分配包含「使用应用程序权限发送电子邮件」权限的权限级别。默认情况下,SharePoint的**「设计」、「完全控制」**权限级别自带这个权限;如果是自定义权限级别,需要确保在权限设置中勾选了「使用应用程序权限发送电子邮件」选项。
- 站点范围:这个权限至少需要在当前站点(Web级别)生效,部分环境可能要求站点集(Site Collection)级别的权限,视你的ShareFarm配置而定。
2. 应用程序上下文(如App Only/ Azure AD应用)
如果后续你需要切换到应用身份调用(而非当前用户),则需要:
- 经典SharePoint Add-in模型:给应用授予**「发送电子邮件」**的应用权限(在应用注册时配置)。
- Microsoft 365现代环境:给Azure AD应用授予**「Mail.Send」**的Graph API权限(委托或应用权限,视场景选择)。
你的代码补充注意点
除了权限,你的AJAX请求还需要补全必要的请求头,否则可能出现权限验证失败或请求无效的问题,完整的headers应该是:
headers: { "Accept": "application/json;odata=verbose", "Content-Type": "application/json;odata=verbose", "X-RequestDigest": $("#__REQUESTDIGEST").val() }
另外,From字段建议使用当前用户的邮箱(可通过_spPageContextInfo.userEmail获取),部分SharePoint环境会限制发送方必须是站点内的有效用户邮箱。
内容的提问来源于stack exchange,提问作者nunonaos
相关产品推荐
相关产品推荐

