java - 如何使用 imap xoauth 获取电子邮件

标签 java oauth imap

如何使用 xoauth 对 imap 进行身份验证来从 gmail 检索邮件。我已经尝试了在 Gmail 数据 api 上为 xoauthAuthenticator.java、xoauthprotocol.java 提供的代码, xoauthsaslclient.java 和 xoauthsaslclienfactory.java

但是我有这样的错误

Exception in thread "main" javax.mail.MessagingException: Remote host closed connection during handshake;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:479)
    at javax.mail.Service.connect(Service.java:275)
    at XoauthAuthenticator.connectToImap(XoauthAuthenticator.java:80)
    at XoauthAuthenticator.main(XoauthAuthenticator.java:114)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at com.sun.mail.iap.ResponseInputStream.read0(ResponseInputStream.java:81)
    at com.sun.mail.iap.ResponseInputStream.readResponse(ResponseInputStream.java:67)
    at com.sun.mail.iap.Response.<init>(Response.java:83)
    at com.sun.mail.imap.protocol.IMAPResponse.<init>(IMAPResponse.java:48)
    at com.sun.mail.imap.protocol.IMAPResponse.readResponse(IMAPResponse.java:122)
    at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:230)
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:91)
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:87)
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:446)
    ... 3 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
    ... 19 more

这可能是什么原因?

最佳答案

当您的 SSL 处理程序不信任来自主机服务器的证书时,将抛出 SSLHandshakeException。您需要将服务器的 SSL 证书添加到您的 keystore 。 Here is a good walk through of the problem以及如何修复它。

关于java - 如何使用 imap xoauth 获取电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797676/

相关文章:

java - JAVA中优先级队列的比较

java - JPA @ElementCollection @Enumerated 不插入

java - 如何使用此 uri 上传到 firebase 存储?

php - 持久性谷歌 OpenID+OAuth?

ssl - Emacs wanderlust IMAP 密码验证

java - Java 编译器是否删除了检查枚举常量的无法访问的 if 语句?

angularjs - AngularJS 与 PassportJS 组合时的 CORS 问题

c# - 配置 OAuth 创建 DefaultConnection 数据库

Perl 创建 SSL 套接字在 1020 个套接字后失败并显示 "Bad hostname"

tcp - Alfresco CIFS 服务器错误