gpt4 book ai didi

azure - Microsoft Graph 使用客户端凭据流(应用程序权限)和个人帐户发送邮件

转载 作者:行者123 更新时间:2023-12-03 00:00:25 30 4
gpt4 key购买 nike

我正在学习 Microsoft Graph,为此我使用 Graph ExplorerPostman .

使用 Graph Explorer:我使用我的个人用户帐户 (hotmail) 登录。连接后,我就可以看到 token 。奇怪的是,当我将此 token 复制/粘贴到jwt.io时它无法被解码。但我可以执行类似 https://graph.microsoft.com/v1.0/me 的查询它返回我作为用户的一些信息(http 200)。或者这个查询https://graph.microsoft.com/v1.0/me/sendMail这允许我发送测试并接收测试邮件(带有http 202)。所有这些请求都是“委托(delegate)许可”。因此,我在个人帐户 (hotmail) 中使用 Graph Explorer 没有任何问题。

使用Postman:这次我将使用“应用程序权限”执行一些测试。我按照以下步骤操作:

在 Azure 门户上

第 1 步:应用程序注册/新注册/我给出名称/选择第三个帐户类型(任何组织目录中的帐户和个人 Microsoft 帐户)/单击“注册”按钮

第2步:Api权限/添加权限/Microsoft Graph/应用程序权限/Mail.Send(以任何用户身份发送邮件)

第 3 步:大管理员同意...按钮以激活权限

第 4 步:证书和 secret /新客户端 secret /输入描述/单击“添加”按钮

第5步:在Postman中获取 token

当在 jwt.io 中复制/粘贴此 token 时,我看到以下内容:

enter image description here

第6步:查询列出所有用户

  • 获取

  • 授权

    • 不记名 token :{bearer-token-received-previously}
  • 标题

    • 内容类型:application/json
  • 好的,我获得了所有用户的信息(json 格式)

第七步:查询发送邮件

{
"message": {
"subject": "This is my subject",
"body": {
"contentType": "Text",
"content": "This is my content"
},
"toRecipients": [
{
"emailAddress": {
"address": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e99d81808c9b9b90c78588878e808ca99a8290878c9dc78b8c" rel="noreferrer noopener nofollow">[email protected]</a>"
}
}
],
"ccRecipients": [
]
},
"saveToSentItems": "false"
}
  • 不正常错误:MailboxNotEnabledForRESTAPI - 此邮箱尚不支持 REST API

我想知道为什么会出现此错误?我可以使用 Graph Explorer(使用委派权限时)发送电子邮件,而不能使用 Postman(使用应用程序权限时)发送电子邮件。

如下所示,我在 Azure 门户上的企业应用程序中授予管理员同意。

enter image description here

我在某处读到该错误意味着用户在 EXO 云中没有邮箱。 EXO是O365交换在线云。因此,如果您在云中没有邮箱,O365 Exchange REST API 将不适用于这些用户。如果是这样,你会怎么做?

我有一个 Web 应用程序,它应该从共享邮箱发送邮件。无论连接哪个用户,这始终是用于发送邮件的同一个邮箱。这就是为什么我选择“应用程序权限”和“客户端凭据流”。

如上所述,我使用个人帐户 (hotmail) 进行测试,但在生产中我将使用工作帐户(无法从我的开发环境访问)。

顺便说一句,我知道有一些库可以促进该过程并避免使用 REST API 调用(url),但我认为这不能解释我面临的问题。

最佳答案

“MailboxNotEnabledForRESTAPI - 此邮箱尚不支持 REST API”此错误消息意味着您用于发送电子邮件的电子邮件帐户没有 Exchange Online 许可证。

对于个人帐户,您应该使用委派权限,您已在 Microsoft Graph Explorer 中尝试过该权限。请参阅Permissions在这里。

enter image description here .

如果我们将个人帐户作为 guest 用户添加到您的租户,尽管我们可以 Assign a license to a guest user (我假设我们可以将 EXO 许可证分配给 guest 用户),EXO 中托管的邮箱与个人帐户的邮箱不同。他们完全是2个独立的邮箱。事实上,我未能将 EXO 许可证分配给 guest 。

因此,在这种情况下,客户端凭据流适用于 AAD 用户,而不是个人帐户。

更新:

对于使用委派权限的个人帐户(您已在 Microsoft Graph Explorer 中尝试过),授权端点为 https://login.microsoftonline.com/commonm/oauth2/v2.0/authorizehttps://login.microsoftonline.com/consumers/oauth2/v2.0/authorize

但是,当您使用具有应用程序权限的客户端凭据流时,您必须在请求中指定租户 ID https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize.

虽然您的个人帐户作为访客用户添加到租户中,但它没有 EXO 许可证(根据测试,我们无法为其分配 EXO 许可证),因此它不会托管在 O365 中。

这就是为什么我们不能将客户凭证流与个人帐户一起使用的原因。

关于azure - Microsoft Graph 使用客户端凭据流(应用程序权限)和个人帐户发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65426179/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com