【问题标题】:Microsoft Graph api Mail services with Spring Boot带有 Spring Boot 的 Microsoft Graph api 邮件服务
【发布时间】:2021-05-11 02:43:57
【问题描述】:

我正在使用 Microsoft Graph api 在我的 Spring Boot 应用程序中发送和获取邮件,

我曾经使用过graph api之类的依赖

         <dependency>
             <groupId>com.microsoft.graph</groupId>
             <artifactId>microsoft-graph</artifactId>
             <version>3.5.0</version>
         </dependency>
         <dependency>
        <!-- This dependency is only needed if you are using the TokenCrendentialAuthProvider -->
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.2.5</version>
    </dependency>

在代码中我的导入是

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.models.BodyType;
import com.microsoft.graph.models.EmailAddress;
import com.microsoft.graph.models.ItemBody;
import com.microsoft.graph.models.Message;
import com.microsoft.graph.models.Recipient;
import com.microsoft.graph.models.UserSendMailParameterSet;
import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.graph.requests.MessageCollectionPage;

代码中出现错误

ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
            .clientId(CLIENT_ID)
            .clientSecret(CLIENT_SECRET).tenantId(TENANT_GUID).build();
    
    TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(SCOPES, clientSecretCredential);


    GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( tokenCredentialAuthProvider ).buildClient();
    

    MessageCollectionPage messagesPage = graphClient.me().messages()
            .buildRequest()
            .select("Sender,Subject")
            .top(10)
            .get();

我在代码中遇到这样的错误。

 (DirectJDKLog.java:175) - Servlet.service() for servlet [dispatcherServlet] in context with path [/ldesk] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.azure.identity.implementation.IdentityClient] with root cause
java.lang.NoClassDefFoundError: Could not initialize class com.azure.identity.implementation.IdentityClient
    at com.azure.identity.implementation.IdentityClientBuilder.build(IdentityClientBuilder.java:113) ~[azure-identity-1.2.5.jar:?]
    at com.azure.identity.ClientSecretCredential.<init>(ClientSecretCredential.java:50) ~[azure-identity-1.2.5.jar:?]
    at com.azure.identity.ClientSecretCredentialBuilder.build(ClientSecretCredentialBuilder.java:62) ~[azure-identity-1.2.5.jar:?]

【问题讨论】:

    标签: java spring-boot microsoft-graph-api


    【解决方案1】:

    如果使用 microsoft-graph 3.4.0,则不能使用 microsoft-graph-auth 创建 IAuthenticationProvider 对象。

    preview:

    ClientCredentialProvider authProvider = new ClientCredentialProvider(CLIENT_ID, SCOPES, CLIENT_SECRET, TENANT_GUID, NATIONAL_CLOUD);
    
    IGraphServiceClient graphClient = GraphServiceClient
                    .builder()
                    .authenticationProvider(authProvider)
                    .buildClient();
    
    User user = graphClient.users(user_id).buildRequest().get();
    

    New version:

    首先,在 Pom.xml 中添加azure-identity。

    ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
            .clientId(clientId)
            .clientSecret(clientSecret)
            .tenantId(tenant)
            .build();
    
    TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(scopes, clientSecretCredential);
    
    GraphServiceClient graphClient =
      GraphServiceClient
        .builder()
        .authenticationProvider(tokenCredentialAuthProvider)
        .buildClient();
    
    User me = graphClient.users(user_id).buildRequest().get();
    

    【讨论】:

    • 如果我的回复有帮助,请采纳,谢谢。
    • IGraphServiceClient 不能在 microsoft-graph 版本 3.4.0 中工作
    • microsoft-graph-auth 不支持新版本。请查看我的更新。
    • 嗨 Pamela Peng,你能分享一下 Git 中最新版本的工作示例吗?
    • 我已经分享了获取graphClient的代码,doc here。也许你可以参考这个教程:docs.microsoft.com/en-us/graph/tutorials/java.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2018-11-12
    • 2015-08-16
    • 2017-12-15
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多