0

我面临一个奇怪的问题。我正在通过 IMAP 连接 gmail 服务器。它在第一次尝试时连接良好。但是当我第二次连接商店时,我遇到了异常。请帮忙。下面是我使用的代码。

String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        try {

            Properties properties = new Properties();
            properties.setProperty("mail.store.protocol", "imaps");
    //      properties.setProperty("mail.imaps.socketFactory.fallback", "false");


            // set this session up to use SSL for IMAP connections
            properties.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            properties.setProperty("mail.imaps.socketFactory.fallback", "false");

            // use the simap port for imap/ssl connections.
        //  properties.setProperty("mail.imap.socketFactory.port", "993");

            URLName url = new URLName("imap", _INCOMINGMAILSERVER, 993, "", _USERNAME, _PASSWORD);

            Session session = Session.getInstance(properties,null);
            session.setDebug(true);

            //Store store = session.getStore("imaps");
            Store store = new IMAPSSLStore(session, url);


            if (store.isConnected()) {
                Log.v("Connected", "TRUE");
            } else {
                Log.v("Connected", "FALSE");
                /*
                 * store.connect(_OUTGOINGMAILSERVER, _USERNAME, _PASSWORD); if
                 * (store.isConnected()) store.close();
                 */


                Log.v("INCOMING SERVER", _INCOMINGMAILSERVER);
                //store.connect(_INCOMINGMAILSERVER, _USERNAME, _PASSWORD);
                store.connect();
            }
            connected = true;

例外

================== 05-15 01:31:50.765:W/System.err(19008):javax.mail.MessagingException:SSL 握手中止:ssl=0x2a8e5238:系统调用期间的 I/O 错误,对等方重置连接;05-15 01:31:50.765: W/System.err(19008): 嵌套异常是: 05-15 01:31:50.765: W/System.err(19008): javax.net.ssl.SSLException: SSL 握手中止:ssl = 0x2a8e5238:系统调用期间的 I/O 错误,对等方 05-15 01:31:50.765 重置连接:W/System.err(19008):在 com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore .java:571) 05-15 01:31:50.765: W/System.err(19008): 在 javax.mail.Service.connect(Service.java:288) 05-15 01:31:50.765: W/System .err(19008): 在 javax.mail.Service.connect(Service.java:169) 05-15 01:31:50.765: W/System.err(19008): 在 javax.mail.Service.connect(Service. java:118) 05-15 01:31:50.765: 带系统。

好的,现在我正在使用这个:-

Properties properties = new Properties();
properties.setProperty("mail.store.protocol", "imaps");
Session session = Session.getInstance(properties,null);
session.setDebug(true);
Store store = session.getStore("imaps"); 
store.connect(_INCOMINGMAILSERVER, _USERNAME, _PASSWORD);

我也收到消息后关闭商店。

但第二次连接时仍然出现同样的错误。似乎服务器没有响应或第二次连接时端口有点忙。我想不通。

4

2 回答 2

0

通过摆脱所有套接字工厂的东西来清理您的代码,并按照此处的过程连接到 Gmail。请务必使用 Session.getStore 而不是自己实例化 IMAPSSLStore。

于 2013-05-15T21:42:17.843 回答
0

我也有同样的例外。我发现这是由于服务器不支持 TLS 1.0 协议。

我发现 Android 设备,http 连接到不支持 TLS 1.0 的服务器失败。我搜索了有关该错误的所有地方,但没有找到与此问题相关的任何内容。当 TLS 1.0 协议支持添加到服务器时,问题就解决了。

您可以使用https://www.ssllabs.com/ssltest检查您的服务器/主机名协议支持

于 2013-12-10T08:55:43.470 回答