首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft发送带有客户凭证流(应用程序权限)和个人帐户的邮件

Microsoft发送带有客户凭证流(应用程序权限)和个人帐户的邮件
EN

Stack Overflow用户
提问于 2020-12-23 14:46:45
回答 1查看 2.1K关注 0票数 2

我正在学习Microsoft,为此我使用了图形探索者邮递员

带有图形资源管理器的:我是用我的个人用户帐户(hotmail)注册的。一旦我连接上,我就能看到标记。奇怪的是,当我在jwt.io中复制/粘贴此令牌时,它无法被解码。然而,我可以执行像https://graph.microsoft.com/v1.0/me这样的查询,它返回我作为用户的一些信息(使用http 200)。或者这个查询https://graph.microsoft.com/v1.0/me/sendMail,它允许我发送一个测试并接收一个测试邮件(使用http 202)。所有这些请求都是“授权许可”。因此,我在我的个人帐户(hotmail)中使用Graph没有任何问题。

和Postman:这一次我将使用“应用程序权限”执行一些测试。我遵循以下步骤:

在Azure Portal上

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

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

第三步:大行政同意.按钮以激活权限。

步骤4:证书和机密/新客户端机密/输入描述/单击添加按钮

步骤5:在邮递员中获取令牌

  • 帖子
代码语言:javascript
复制
- [https://login.microsoftonline.com/{my-tenant-id-here}/oauth2/v2.0/token](https://login.microsoftonline.com/%7Bmy-tenant-id-here%7D/oauth2/v2.0/token)
  • 标头
代码语言:javascript
复制
- Content-Type: application/x-www-form-urlencoded
  • 正文
代码语言:javascript
复制
- client\_id: {my-client-id-here}
- client\_secret: {my-client-secret-here}
- grant\_type: client\_credentials
- scope: [https://graph.microsoft.com/.default](https://graph.microsoft.com/.default)
  • 好的,我有个记号

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

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

  • 到达
代码语言:javascript
复制
- [https://graph.microsoft.com/v1.0/users](https://graph.microsoft.com/v1.0/users)
  • 授权
代码语言:javascript
复制
- Bearer token: {bearer-token-received-previously}
  • 标头
代码语言:javascript
复制
- Content-Type: application/json
  • 好的,我得到了所有用户的信息(如json)

步骤7:查询发送邮件

代码语言:javascript
复制
{
  "message": {
    "subject": "This is my subject",
    "body": {
      "contentType": "Text",
      "content": "This is my content"
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "thierry.langie@skynet.be"
        }
      }
    ],
    "ccRecipients": [
    ]
  },
  "saveToSentItems": "false"
 }
  • 不确定错误:此邮箱还不支持MailboxNotEnabledForRESTAPI - REST。

我想知道为什么会出现这个错误?,我可以用图资源管理器发送电子邮件(当使用委托权限时),而不是向邮递员发送电子邮件(当使用应用程序权限时)。

如下所示,我在Azure上授予企业应用程序中的管理许可。

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

我有一个Web应用程序,它应该从共享邮箱发送邮件。无论哪个用户被连接,这个邮箱总是同一个用来发送邮件的邮箱。这就是为什么我使用“应用程序权限”和“客户凭证流”。

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

顺便提一句,我知道有一些库可以简化流程,避免使用REST调用(urls),但我认为这不能解释我所面临的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-24 02:58:49

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

对于个人帐户,应使用已在中尝试过的委托权限。这里见权限

如果我们以来宾用户的身份将个人帐户添加到您的租户,尽管我们可以向来宾用户分配许可证 (我假设我们可以将EXO许可证分配给来宾用户),但EXO中托管的邮箱与个人帐户的邮箱不同。他们一共是两个分开的邮箱。事实上,我没有给客人分配EXO许可证。

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

更新:

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

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

虽然您的个人帐户是以来宾用户的身份添加到租户中的,但它没有EXO许可证(根据测试,我们无法将EXO许可证分配给它),所以它不会托管在O365中。

这就是为什么我们不能使用客户凭证流与个人帐户。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65426179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档