xiaodunshan 2024-07-11 14:43 采纳率: 0%
浏览 26
已结题

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

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-11 14:43
    关注

    引自免费微信小程序:皆我百晓生

    针对你遇到的问题“Error message: Access token validation failure. Invalid audience”,这个错误可能是由于客户端配置的授权服务器地址不正确或不一致导致的。这里有一些建议和解决方案:

    解决方案:

    1. 检查你的认证URL和token的使用范围

    确保你在代码中使用的认证URL(比如获取token的URL)与你的Azure AD应用注册时设置的URL一致。同时,检查你的应用注册时是否包含了正确的权限范围(scope),以便访问Microsoft Graph API。例如,正确的scope可能是 https://microsoftgraph.com/.default 或其他特定于Microsoft Graph API的scope。

    2. 更新Audience地址

    你可能需要调整代码中的audience地址以匹配正确的Microsoft Graph服务URL。对于世纪互联运营的中国区服务,确保你使用的audience URL是正确的。有时候,这需要在Azure AD应用注册设置中指定正确的回复URL。你可以在Azure AD应用中检查和设置这些值。你可能需要在创建token凭据时添加audience设置或在构建客户端请求时设置合适的HTTP头信息。具体的设置取决于你所使用的Microsoft Graph SDK版本和Azure SDK版本。

    3. 更新代码中的租户ID和客户端ID

    确保你在代码中使用的租户ID和客户端ID是正确的,并且与Azure AD应用注册中的值相匹配。错误的租户ID或客户端ID也可能导致无效的token错误。

    示例代码调整(仅作参考,具体实现可能有所不同):

    如果你使用的是特定的Microsoft Graph SDK,你可能需要调整获取token的方式以及发送邮件时的认证方式。例如,你可能需要创建一个特定的认证提供者或者客户端实例来包含正确的audience地址或其他必要的配置信息。具体实现取决于你所使用的SDK版本和配置方式。如果你使用的是自定义的HTTP客户端来发送请求,你需要在HTTP头中设置正确的audience信息或其他认证相关的头信息。如果你能提供你正在使用的SDK或库的详细信息,我可以给出更具体的建议。

    注意:

    在修改代码之前,请确保你已经仔细检查了Azure AD应用注册信息、API权限、客户端秘密等信息,并且了解如何正确使用它们来配置你的应用程序。此外,确保你遵循了世纪互联提供的关于使用Microsoft Graph API的指导方针和建议。在某些情况下,你可能还需要联系世纪互联的技术支持以获取帮助解决特定的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月14日
  • 赞助了问题酬金15元 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面