Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Azure应用程序代表用户发送电子邮件?_Azure_Azure Web App Service_Microsoft Graph Api_User Permissions - Fatal编程技术网

如何使用Azure应用程序代表用户发送电子邮件?

如何使用Azure应用程序代表用户发送电子邮件?,azure,azure-web-app-service,microsoft-graph-api,user-permissions,Azure,Azure Web App Service,Microsoft Graph Api,User Permissions,我尝试使用Open Graph从Azure Web App代表用户发送电子邮件。电子邮件必须使用office365邮件服务器发送,并应保存在用户发送的邮箱中。上述应用程序只能由授权用户访问,授权使用以下端点执行: https://login.microsoftonline.com/{tennantid}/oauth2/authorize?response_type=code+id_token&redirect_uri={domain}.auth%2Flogin%2Faad%2Fcallb

我尝试使用Open Graph从Azure Web App代表用户发送电子邮件。电子邮件必须使用office365邮件服务器发送,并应保存在用户发送的邮箱中。上述应用程序只能由授权用户访问,授权使用以下端点执行:

https://login.microsoftonline.com/{tennantid}/oauth2/authorize?response_type=code+id_token&redirect_uri={domain}.auth%2Flogin%2Faad%2Fcallback&client_id={clientId}&scope=openid+profile+email&response_mode=form_post
https://graph.microsoft.com/v1.0/me/sendMail
用户登录后,我将获取访问令牌,以便进一步请求打开图形:

https://login.microsoftonline.com/{tennantid}/oauth2/v2.0/token

grant_type  "client_credentials"
client_secret   "{clientSecret}"
client_id   "{clientId}"
scope   "https://graph.microsoft.com/.default"
接下来,我将发布到sendMail端点:

https://login.microsoftonline.com/{tennantid}/oauth2/authorize?response_type=code+id_token&redirect_uri={domain}.auth%2Flogin%2Faad%2Fcallback&client_id={clientId}&scope=openid+profile+email&response_mode=form_post
https://graph.microsoft.com/v1.0/me/sendMail
并传递必要的参数,以及在上一步检索accessToken的
授权承载{accessToken}
头。这将返回一个错误:

"code":"NoPermissionsInAccessToken","message":"The token contains no permissions, or permissions can not be understood."
至于权限,应用程序已为mail.send设置了委派权限,以便它只能代表登录用户发送电子邮件。应用程序在登录时未向用户请求权限,未提供任何许可


在深入研究文档并花了相当长的时间之后,我不知道如何使其工作,因此任何提示都将受到感谢。

当您使用客户端凭据授予类型时,您将获得应用程序令牌,并且需要为其设置应用程序令牌

API不知道这里的/me是什么意思,因为它是一个客户端凭据流

如果要使用客户端凭据流,则要发送邮件,需要以这种方式指定调用

因此,请添加邮件。在Azure中发送应用程序权限,如下面的屏幕截图所示,然后拨打上述电话


您还可以使用您的访问令牌验证您是否有权限。

如果我不想授予Applicaton以任何用户身份发送的权限,该怎么办?在这种情况下还有其他解决方案吗?@jacek_podwysocki要代表任何用户发送邮件,您应该使用应用程序权限,如果您使用委托权限,则需要使用用户上下文流,如授权代码流等。,用户需要登录,然后邮件将代表登录用户发送,在这种情况下,您将使用/me/sendMail调用。