我正在学习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:在邮递员中获取令牌
- [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)- Content-Type: application/x-www-form-urlencoded- 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:查询列出所有用户
- [https://graph.microsoft.com/v1.0/users](https://graph.microsoft.com/v1.0/users)- Bearer token: {bearer-token-received-previously}- Content-Type: application/json步骤7:查询发送邮件
{
"message": {
"subject": "This is my subject",
"body": {
"contentType": "Text",
"content": "This is my content"
},
"toRecipients": [
{
"emailAddress": {
"address": "thierry.langie@skynet.be"
}
}
],
"ccRecipients": [
]
},
"saveToSentItems": "false"
}我想知道为什么会出现这个错误?,我可以用图资源管理器发送电子邮件(当使用委托权限时),而不是向邮递员发送电子邮件(当使用应用程序权限时)。
如下所示,我在Azure上授予企业应用程序中的管理许可。

我在某个地方看到错误意味着用户在EXO云中没有邮箱。EXO是O365交换在线云。因此,如果您在云中没有邮箱,O365 Exchange将不适用于这些用户。如果是这样的话,你会怎么做?
我有一个Web应用程序,它应该从共享邮箱发送邮件。无论哪个用户被连接,这个邮箱总是同一个用来发送邮件的邮箱。这就是为什么我使用“应用程序权限”和“客户凭证流”。
如上所述,我使用我的个人帐户(hotmail)进行测试,但在生产中我将使用一个工作帐户(从我的dev环境中无法访问)。
顺便提一句,我知道有一些库可以简化流程,避免使用REST调用(urls),但我认为这不能解释我所面临的问题。
发布于 2020-12-24 02:58:49
“此邮箱还不支持MailboxNotEnabledForRESTAPI- REST”此错误消息意味着用于发送电子邮件的电子邮件帐户没有Exchange许可证。
对于个人帐户,应使用已在中尝试过的委托权限。这里见权限。

。
如果我们以来宾用户的身份将个人帐户添加到您的租户,尽管我们可以向来宾用户分配许可证 (我假设我们可以将EXO许可证分配给来宾用户),但EXO中托管的邮箱与个人帐户的邮箱不同。他们一共是两个分开的邮箱。事实上,我没有给客人分配EXO许可证。
因此,在这种情况下,客户凭证流适用于AAD用户,而不是个人帐户。
更新:
对于使用委托权限的个人帐户(您在Microsoft中尝试过),授权端点是https://login.microsoftonline.com/commonm/oauth2/v2.0/authorize或https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize。
但是,当您使用带有应用程序权限的客户端凭据流时,您必须在请求https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize中指定租户id。
虽然您的个人帐户是以来宾用户的身份添加到租户中的,但它没有EXO许可证(根据测试,我们无法将EXO许可证分配给它),所以它不会托管在O365中。
这就是为什么我们不能使用客户凭证流与个人帐户。
https://stackoverflow.com/questions/65426179
复制相似问题