🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
microsoft.graph 中国服邮箱发送失败问题。在用java语言使用microsoft.graph 发送邮件时使用的是由世纪互联运营的中国服,根据 https://microsoftgraph.chinacloudapi.cn/.default 获取token ;但是在发送邮件时一直提示:
Throwable detail: com.microsoft.graph.http.GraphServiceException: Error code: InvalidAuthenticationToken
Error message: Access token validation failure. Invalid audience.
查找相关资料后(https://zhuanlan.zhihu.com/p/621741681) 发现可能是因为地址设置的不匹配造成的 但是在代码层级怎么去设置发送邮箱地址。
相关代码如下:
private void auth() {
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.tenantId(tenantId)
.clientSecret(clientSecret)
.authorityHost(AzureAuthorityHosts.AZURE_CHINA)
.build();
//https://microsoftgraph.chinacloudapi.cn/.default
authProvider = new TokenCredentialAuthProvider(
Arrays.asList("https://microsoftgraph.chinacloudapi.cn/.default")
, clientSecretCredential
);
}
public Message sendMail(String sender, List<String> recipients, String subject, String body, List<FileAttachment> files) throws Exception {
// Ensure client isn't null
if (graphClient == null) {
throw new Exception("Graph has not been initialized for user auth");
}
// Create a new message
Message message = new Message();
message.subject = subject;
message.body = new ItemBody();
message.body.content = body;
message.body.contentType = BodyType.HTML;
//收件人
if (recipients != null && recipients.size() > 0) {
message.toRecipients = new ArrayList<>();
for (String item : recipients) {
Recipient toRecipient = new Recipient();
toRecipient.emailAddress = new EmailAddress();
toRecipient.emailAddress.address = item;
message.toRecipients.add(toRecipient);
}
}
//附件
message = addAttarchment(message, files);
// Send the message
graphClient
.users(sender)
.sendMail(UserSendMailParameterSet.newBuilder()
.withMessage(message)
.build())
.buildRequest()
.post();
return message;
}
相关帮助链接 :
https://blog.csdn.net/hanjun0612/article/details/136319440?spm=1001.2014.3001.5501
https://blog.csdn.net/hanjun0612/article/details/136806768?spm=1001.2014.3001.5501
友情提示:
如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。
解决方案
如下是上述问题的解决方案,仅供参考:
在使用 Microsoft Graph API 通过 Java 发送邮件时,如果遇到 “InvalidAuthenticationToken” 错误,这通常意味着提供的访问令牌无效或其受众(audience)与请求的资源不匹配。根据您提供的信息和代码示例,这里有几个可能的解决方案:
-
确保受众(Audience)正确:
- 您需要确保获取的访问令牌的受众与您请求访问的资源匹配。对于中国区的 Microsoft Graph API,受众应该是
https://microsoftgraph.chinacloudapi.cn
。
- 您需要确保获取的访问令牌的受众与您请求访问的资源匹配。对于中国区的 Microsoft Graph API,受众应该是
-
修改 TokenCredentialAuthProvider:
- 您提供的
TokenCredentialAuthProvider
应该使用正确的资源 URL。请确保您在获取令牌时使用的是正确的资源标识符。
- 您提供的
-
检查权限和作用域:
- 确保您的应用在 Azure AD 应用注册中拥有发送邮件所需的权限和作用域。您可能需要在 Azure 门户中为应用添加
Mail.Send
权限,并确保已获得管理员同意。
- 确保您的应用在 Azure AD 应用注册中拥有发送邮件所需的权限和作用域。您可能需要在 Azure 门户中为应用添加
-
使用正确的发送者邮箱:
- 确保
sender
参数是有效的邮箱地址,并且该邮箱地址与获取令牌的用户相关联。
- 确保
-
检查 AuthorityHost:
- 您已经设置了
authorityHost
为AzureAuthorityHosts.AZURE_CHINA
,这看起来是正确的。确保这个设置与您的 Azure China Cloud 环境匹配。
- 您已经设置了
-
检查令牌获取逻辑:
- 确保您使用的
ClientSecretCredential
实例正确获取了访问令牌。您可以打印出获取到的令牌并使用jwt.ms
等工具检查其受众和其他声明。
- 确保您使用的
-
检查 Microsoft Graph API 版本:
- 确保您使用的 Microsoft Graph SDK 版本支持中国区服务,并且与您使用的 Graph API 版本兼容。
-
错误处理:
- 在
sendMail
方法中添加错误处理逻辑,捕获GraphServiceException
并打印出错误信息,这有助于进一步诊断问题。
- 在
-
联系支持:
- 如果问题依然无法解决,您可能需要联系 Microsoft 支持或查看 Microsoft Graph API 的官方文档获取更多帮助。
最后,您提供的代码示例中的 auth
方法已经设置了中国区的 authorityHost
,但请确保其他所有配置项都正确无误,包括客户端 ID、租户 ID 和客户端密钥。同时,确保您的应用已经在中国区 Azure AD 中正确注册,并且具有相应的权限。
希望如上措施及解决方案能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。