java中的安全imap连接

java中的安全imap连接,java,ssl,imap,Java,Ssl,Imap,我正在尝试使用在以下位置找到的java程序连接到我们的imap服务器,该服务器监听端口993: 我在Ubuntu上运行这个程序。 然而,我得到以下例外情况: DEBUG: setDebug: JavaMail version 1.4ea DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc] DEBUG: mail.i

我正在尝试使用在以下位置找到的java程序连接到我们的imap服务器,该服务器监听端口993:

我在Ubuntu上运行这个程序。 然而,我得到以下例外情况:

DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
javax.mail.MessagingException: Unrecognized SSL message, plaintext connection?;
  nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:479)
    at javax.mail.Service.connect(Service.java:275)
    at javax.mail.Service.connect(Service.java:156)
    at org.myorg.IMAP.main(IMAP.java:40)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:753)
    at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    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
DEBUG:setDebug:JavaMail版本1.4ea
调试:getProvider()返回javax.mail.Provider[STORE,imaps,com.sun.mail.imap.imapssltore,sun Microsystems,Inc]
调试:mail.imap.fetchsize:16384
javax.mail.MessaginException:无法识别的SSL消息,纯文本连接?;
嵌套异常是:
javax.net.ssl.SSLException:无法识别的ssl消息,纯文本连接?
在com.sun.mail.imap.IMAPStore.protocolConnect上(IMAPStore.java:479)
在javax.mail.Service.connect(Service.java:275)
在javax.mail.Service.connect(Service.java:156)
位于org.myorg.IMAP.main(IMAP.java:40)
原因:javax.net.ssl.SSLException:无法识别的ssl消息,纯文本连接?
位于com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)
位于com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:753)
位于com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
位于com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
在java.io.BufferedInputStream.fill处(BufferedInputStream.java:218)
在java.io.BufferedInputStream.read处(BufferedInputStream.java:237)
位于com.sun.mail.iap.ResponseInputStream.read0(ResponseInputStream.java:81)
位于com.sun.mail.iap.ResponseInputStream.readResponse(ResponseInputStream.java:67)
位于com.sun.mail.iap.Response(Response.java:83)
在com.sun.mail.imap.protocol.imapreponse上。(imapreponse.java:48)
在com.sun.mail.imap.protocol.IMAPResponse.readResponse(IMAPResponse.java:122)上
位于com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:230)
在com.sun.mail.iap.Protocol.(Protocol.java:91)
在com.sun.mail.imap.protocol.IMAPProtocol.(IMAPProtocol.java:87)
在com.sun.mail.imap.IMAPStore.protocolConnect上(IMAPStore.java:446)
... 3个以上
在这篇文章的结尾,他们建议: 看起来您必须将imap服务器的证书添加到受信任的证书存储中

  • 下载imap服务器的证书
  • 找到您的cacerts文件
  • 使用keytool将证书导入到您的cacerts文件中
  • 但是,我无法理解如何对运行在Windows计算机上的IMAP服务器执行这些步骤


    有人能帮我吗?

    正如错误消息所示,您可能没有连接到SSL加密端口,而是连接到纯文本端口。请使用您的实际配置(主机、端口、协议)更新您的问题


    如果您丢失了证书,则会收到完全不同的错误消息。

    配置如下:Properties props=new Properties();props.put(“mail.imaps.host”,“1.2.3.4”);props.put(“mail.imaps.auth”、“true”);props.put(“mail.debug”,“true”);props.put(“mail.imaps.port”,993);props.put(“mail.imaps.socketFactory.port”,993);put(“mail.imaps.socketFactory.class”、“javax.net.ssl.SSLSocketFactory”);props.put(“mail.imaps.socketFactory.fallback”、“false”)@GregS有两种方法:连接明文IMAP(端口143)并发出STARTTLS,或者通过SSL连接到端口993(即SSL加密的IMAP端口)。它们是相互排斥的。@MarkRotteveel:这是有道理的,谢谢Mark。我将删除我的评论。我有同样的问题。你能告诉我这里的解决方案吗?