尝试使用Graph API发送邮件时出现405/404错误(OAuth2客户端凭据流)



我正在制作一个Java应用程序,使用Graph API以Microsoft租户中的任何用户的身份发送邮件,因此我使用客户端凭据流(无登录,自动发送(。我已在Azure AD中注册了一个应用程序,授予以下应用程序权限(未委派(,检查每个项目的管理员同意:

  • 邮件发送
  • Mail.ReadWrite
  • User.Read.All

对于语义,我也尝试过Postman中的调用,但我遇到了与Java应用程序中相同的问题。我想当然地认为我有一个有效的访问令牌(如果我尝试使用无效的访问令牌,我会得到一个401: Unauthorized(。以下是我从中获得的解码访问令牌https://jwt.ms/,包括所有作用域

...
"roles": [
"Mail.ReadWrite",
"User.Read.All",
"Mail.Send"
],
...

这是我的Java代码:

String user = "/users/<my user id or my user principal name>";

UserRequestBuilder defaultUser = new UserRequestBuilder(graphClient.getServiceRoot() + user, graphClient, null);

//graphClient.me()
defaultUser
.sendMail(UserSendMailParameterSet
.newBuilder()
.withMessage(message)
.withSaveToSentItems(saveToSentItems)
.build())
.buildRequest()
.post();

我不能用";我"target(me()方法(,因为这是客户端凭据流,所以没有记录用户。我需要以这种方式指定发件人:/users/{id | userPrincipalName}/sendMail

Postman中的呼叫就是这样组成的:

方法:POST

网址:

  • 。https://graph.microsoft.com/v1.0/users/{my user id or my user principal name}/sendMail

授权:

  • 承载令牌(我的访问令牌(

标题:

  • 内容类型:application/json

BODY(JSON(:

{
"recipient":    <recipient email>,
"subject":      "This is a test mail",
"from":         <mail that created the tenant, app and access token>,
"text":         "This is the messge body..."
}

这是来自服务器的响应(在Postman和Java应用程序中(:

状态:405:不允许使用方法

身体:

{
"error": {
"code": "Request_BadRequest",
"message": "Specified HTTP method is not allowed for the request target.",
"innerError": {
"date": "2022-08-05T07:17:34",
"request-id": "XXXXXXXX-6075-4d13-83ed-XXXXXXXXXXXX",
"client-request-id": "XXXXXXXX-6075-4d13-83ed-XXXXXXXXXXXX"
}
}
}

注意1:我使用我的访问令牌通过Postman调用获得了我的用户id和用户主体名称,利用User.Read.All权限,使用以下调用:

https://graph.microsoft.com/v1.0/users

这就是回应:

...
"userPrincipalName": "XXXXXX_XXXXXX.XXX#EXT#@sendClientCredMail.onmicrosoft.com",
"id": "XXXXXXXX-4457-4944-bb22-XXXXXXXXXXXX"
}
]
}

注意2:注意,如果我使用";主体名称";在通话中,如果我使用";id";相反,我得到了404:未找到

提前感谢您的帮助,我已经试了好几个小时了!

已解决

正如Optimal在评论中所说,问题是用户没有获得许可的邮箱。当我分配一个";Microsoft 365 Business Premium";许可证,我的代码运行良好。在portal.azure.com上查看许可证以获取分配,在admin.microsoft.com上查看活动邮箱

问候

相关内容

  • 没有找到相关文章

最新更新