Java 如何为邮件实际配置Microsoft Graph API

Java 如何为邮件实际配置Microsoft Graph API,java,azure,email,microsoft-graph-api,microsoft-graph-mail,Java,Azure,Email,Microsoft Graph Api,Microsoft Graph Mail,我第一次尝试使用MS Graph API。我想做的很简单——我想创建一个守护程序应用程序,它将不断检查outlook/microsoft邮箱中的未读邮件,如果发现,它将提取邮件并处理内容 到目前为止我做了什么 使用mypersonal outlook ID登录Azure portal,并在Azure AD中注册了一个应用程序。该应用程序已在有效的发布者域中注册。 使用桌面/移动应用程序平台更新了身份验证部分,并将重定向URL配置为默认值 添加了邮件图形API的权限。 开始使用JavaSDK处

我第一次尝试使用MS Graph API。我想做的很简单——我想创建一个守护程序应用程序,它将不断检查outlook/microsoft邮箱中的未读邮件,如果发现,它将提取邮件并处理内容

到目前为止我做了什么

  • 使用mypersonal outlook ID登录Azure portal,并在Azure AD中注册了一个应用程序。该应用程序已在有效的发布者域中注册。
  • 使用桌面/移动应用程序平台更新了身份验证部分,并将重定向URL配置为默认值
  • 添加了邮件图形API的权限。
  • 开始使用JavaSDK处理客户端代码。我尝试了多种身份验证提供程序方法,当我尝试登录并给予同意时,不支持个人电子邮件。我尝试了一封基于微软的工作邮件,但它仍然说没有发送令牌。乙二醇
  • 请提供一些关于

  • Graph API可以单独用于工作帐户吗
  • 我在做的事情中有什么遗漏吗。我是个彻头彻尾的傻瓜。在谷歌也找不到一个好的例子来工作了

  • Java SDK-3.3和Java 1.8版

    首先,您只能在获得授权的情况下访问个人帐户电子邮件

    委派权限意味着您必须为您的个人帐户实施用户登录

    在您的情况下,您正在尝试创建一个不需要用户登录且需要应用程序权限(与委派权限相反)的守护程序应用程序

    因此,您的预期设计无法实现

    总之,要访问您的个人帐户电子邮件,您应该遵循以下步骤

    请记住,在创建AAD应用程序时,您应该将您的AAD应用程序注册设置为organization+personal或personal only,这是@Dev在评论中建议的

    在中,设置
    aad.authority=https://login.microsoftonline.com/common
    因为
    /common
    可以用于个人帐户


    其他参考资料:

    是,您只能访问个人帐户。为此,我使用了以下步骤(1)将您的AAD应用程序设置为organization+personal或personal only(2)然后使用MSAL库进行身份验证;是的,您也有一个java flavor(3)成功获取令牌,然后使用Microsoft Graph(Outlook/hotmail)等受保护的资源拨打电话。当您查找时,这里是我能想到的最接近的令牌。这将帮助您开始。谢谢您的指导。我将尝试这样做并更新
    Exception in thread "main" com.microsoft.graph.core.ClientException: Error executing the request
    at com.microsoft.graph.http.CoreHttpProvider.sendRequestInternal(CoreHttpProvider.java:400)
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:220)
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:197)
    at com.microsoft.graph.http.BaseRequest.send(BaseRequest.java:332)
    at com.microsoft.graph.requests.UserRequest.get(UserRequest.java:136)
    at test.api.APITester.getClient(APITester.java:34)
    at test.api.APITester.main(APITester.java:41)
    Caused by: java.io.IOException: java.util.concurrent.ExecutionException: com.azure.core.exception.ClientAuthenticationException: Failed to acquire token with Interactive Browser Authentication.
    at com.microsoft.graph.httpcore.AuthenticationHandler.intercept(AuthenticationHandler.java:65)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at com.microsoft.graph.httpcore.TelemetryHandler.intercept(TelemetryHandler.java:69)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
    at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
    at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
    at com.microsoft.graph.http.CoreHttpProvider.sendRequestInternal(CoreHttpProvider.java:397)
    ... 6 more
    Caused by: java.util.concurrent.ExecutionException: com.azure.core.exception.ClientAuthenticationException: Failed to acquire token with Interactive Browser Authentication.
    at java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
    at java.util.concurrent.CompletableFuture.get(Unknown Source)
    at com.microsoft.graph.httpcore.AuthenticationHandler.intercept(AuthenticationHandler.java:55)
    ... 12 more
    Caused by: com.azure.core.exception.ClientAuthenticationException: Failed to acquire token with Interactive Browser Authentication.
    at com.azure.identity.implementation.IdentityClient.lambda$authenticateWithBrowserInteraction$28(IdentityClient.java:703)
    at reactor.core.publisher.Mono.lambda$onErrorMap$30(Mono.java:3384)
    at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:192)
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:259)
    at reactor.core.publisher.MonoCompletionStage.lambda$subscribe$0(MonoCompletionStage.java:76)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(Unknown Source)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(Unknown Source)
    at java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source)
    at java.util.concurrent.CompletableFuture$AsyncSupply.exec(Unknown Source)
    at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    Caused by: com.microsoft.aad.msal4j.MsalClientException: No Authorization code was returned from the server
    at com.microsoft.aad.msal4j.AcquireTokenByInteractiveFlowSupplier.getAuthorizationResultFromHttpListener(AcquireTokenByInteractiveFlowSupplier.java:140)
    at com.microsoft.aad.msal4j.AcquireTokenByInteractiveFlowSupplier.getAuthorizationResult(AcquireTokenByInteractiveFlowSupplier.java:64)
    at com.microsoft.aad.msal4j.AcquireTokenByInteractiveFlowSupplier.execute(AcquireTokenByInteractiveFlowSupplier.java:37)
    at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:59)
    at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:17)
    ... 6 more