首页 > 解决方案 > 阅读邮件时 Google Gmail API Java 无法按预期工作

问题描述

我想使用 Google Gmail API for Java 从 gmail 帐户读取邮件。

我创建了一个示例 Core Java 项目,代码在此处为 gmail 应用程序的 google 控制台开发人员示例中给出

我运行了这段代码,但我遇到了java.net.SocketTimeoutException: Read timed out异常。实施细则如下:

当我调试上面的代码时,在第 67 行return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");,我得到一个浏览器提示登录 gmail 帐户以访问在开发人员控制台中配置的我的项目。

http://localhost:25745/Callback?code=4/AABrLErTmOxzKEqqD31iiMftE93i3k06oJ4sAI34uS7jI7U-VAdofx0hV8ZoyzHEJyjFEx6x1VYASMNe779Dpa0#

我收到消息“收到验证码。您现在可以关闭此窗口。” 在屏幕上。在 url 中,端口每次都会更改。

在代码中,它尝试请求令牌以开始执行 gmail 操作,但它在那里等待并给出以下异常:

Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
at sun.security.ssl.InputRecord.read(InputRecord.java:532)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1283)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1258)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:79)

此外,我尝试通过https://accounts.google.com/o/oauth2/token使用以下参数发送 POST 请求来手动获取令牌:代码 - 允许访问应用程序 client_id 后我在 URL 中收到的代码 - o-auth 客户端的客户端 ID client_secret - o-auth 客户端的客户端密钥 grant_type - authentication_code redirect_uri - http://localhost

我得到以下响应:{“error”:“invalid_grant”,“error_description”:“Bad Request”}

任何人都知道我如何解决上述错误或我做错了什么,这将是一个很大的帮助。

标签: javagmail-apigoogle-api-java-client

解决方案


推荐阅读