2015-03-30 2 views
1

я следующий метод для получения сообщений из Gmail с помощью IMAPSSLHandshakeException: Удаленный хост закрыл соединение во время рукопожатия

public static void main(String[] args) 
    { 
     Properties props = new Properties(); 
     try 
     { 
      props.load(new FileInputStream(new File("smtp.properties"))); 
      Session session = Session.getDefaultInstance(props, null); 

      Store store = session.getStore("imaps"); 
      store.connect("smtp.gmail.com", "******@gmail.com", "mypass"); 

      Folder inbox = store.getFolder("inbox"); 
      inbox.open(Folder.READ_ONLY); 
      int messageCount = inbox.getMessageCount(); 

      Message[] messages = inbox.getMessages(); 
      System.out.println("------------------------------"); 
      for (int i = 0; i < 10; i++) 
      { 
       System.out.println("Mail Subject:- " + messages[i].getSubject()); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

моего smtp.properties содержит

mail.smtp.host=smtp.gmail.com 
mail.smtp.socketFactory.port=465 
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
mail.smtp.auth=true 
mail.smtp.port=465 

я получаю следующее, когда я бегу программа

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:695) 
    at javax.mail.Service.connect(Service.java:345) 
    at javax.mail.Service.connect(Service.java:226) 
    at gmailsmpt.Main.main(Main.java:25) 
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:532) 
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:337) 
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:229) 
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:116) 
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:121) 
    at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:710) 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:659) 
    ... 3 more 
Caused by: java.io.EOFException: SSL peer shut down incorrectly 
    at sun.security.ssl.InputRecord.read(Unknown Source) 
    ... 14 more 

Как исправить проблему?

+0

Попробуйте использовать '-Djavax.net.debug = all', чтобы получить лучшее представление о том, на какой стадии рукопожатия соединение закрывается. – beny23

+0

Почему вы используете свойства SMTP для соединения IMAP? – EJP

+0

вы следуете http://www.technicalkeeda.com/java/how-to-access-gmail-inbox-using-java-imap – SpringLearner

ответ

0

Есть ли больше стоп-кадров? Старые версии Java имеют проблемы с рукопожатиями TLS с ключами RSA с более чем 1024 бит (могут быть также с ключами, имеющими точно бит-байт).

Это было исправлено в Java 1.7 или Java 1.8.

+0

Я использую java 1.8 – Arya

0

Во-первых, очистите все эти common mistakes. Вам не нужны фабрики сокетов.

Тогда попробуйте эти connection debugging tips.

Возможно, у вас есть брандмауэр или антивирусная программа, которая мешает вам подключиться.