Java 如何为邮件实际配置Microsoft Graph API
我第一次尝试使用MS Graph API。我想做的很简单——我想创建一个守护程序应用程序,它将不断检查outlook/microsoft邮箱中的未读邮件,如果发现,它将提取邮件并处理内容 到目前为止我做了什么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处
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