Ошибка JavaMail + нераспознанное сообщение SSL, текстовое соединение?

Использование приведенного ниже кода для чтения почты с почтового сервера Zimbra.

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

Properties pop3Props = new Properties();

pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.auth", "true");
pop3Props.setProperty("mail.pop3.port",  "110");
pop3Props.setProperty("mail.pop3.socketFactory.port", "110");

URLName url = new URLName("pop3", host, 110, "",username, password);

Session session = Session.getInstance(pop3Props, null);
Store store = new POP3SSLStore(session, url);
store.connect();

Но продолжайте получать эту ошибку

javax.mail.MessagingException: Connect failed;
  nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:148)
    at javax.mail.Service.connect(Service.java:275)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at VerifyMail.readPOP3(VerifyMail.java:177)
    at VerifyMail.main(VerifyMail.java:20)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
    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 java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at java.io.DataInputStream.readLine(Unknown Source)
    at com.sun.mail.pop3.Protocol.simpleCommand(Protocol.java:347)
    at com.sun.mail.pop3.Protocol.<init>(Protocol.java:91)
    at com.sun.mail.pop3.POP3Store.getPort(POP3Store.java:201)
    at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:144)
    ... 5 more

Может ли кто-нибудь помочь, как это решить?


person Akbar    schedule 11.09.2012    source источник
comment
Пробовал с этим кодом Properties props = new Properties(); props.put(mail.pop3.auth, правда); props.put(mail.pop3.starttls.enable, правда); Сеанс сеанса = Session.getDefaultInstance (реквизит, ноль); сеанс.setDebug (истина); Store store= session.getStore(pop3); store.connect(хост,имя пользователя,пароль); Папка папки = store.getFolder(INBOX); ОШИБКА --- javax.mail.AuthenticationFailedException: допустимо только после входа в режим TLS в com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:146) в javax.mail.Service.connect(Service.java:275) я был бы признателен, если кто-то может помочь в этом коде?   -  person Akbar    schedule 11.09.2012


Ответы (2)


Прочтите этот список распространенных ошибок, а затем исправьте код.

пример Gmail также подойдет вам, хотя очевидно, вам нужно будет изменить имя хоста.

person Bill Shannon    schedule 11.09.2012
comment
Билл, все еще получаю ту же ошибку --- javax.mail.AuthenticationFailedException: действителен только после входа в режим TLS CODE--Properties props=System.getProperties(); Session session = Session.getInstance(props, null);session.setDebug(true ); Store store = session.getStore (pop3); store.connect (хост, 110, имя пользователя, пароль); - person Akbar; 12.09.2012
comment
Добавлено (props.put(mail.pop3.starttls.enable, true);) и протестировано с последним API JavaMail, и теперь появляется эта ошибка javax.mail.MessagingException: Ошибка подключения; вложенное исключение: java.io.IOException: не удалось преобразовать сокет в TLS на com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:210) Вызвано: java.io.IOException: Не удалось преобразовать сокет в TLS Вызвано: javax.net.ssl.SSLHandshakeException: солнце .security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации к запрошенной цели - person Akbar; 12.09.2012

Это поможет вам обойти процесс сертификата и получить прямой доступ к хосту ssl.

    MailSSLSocketFactory sf = null;
    try
    {
        sf = new MailSSLSocketFactory();
    }
    catch (GeneralSecurityException e)
    {
        e.printStackTrace();
    }
            sf.setTrustAllHosts(true);

    Properties pop3Props = new Properties();
    pop3Props.setProperty("mail.pop3.ssl.enable", "true");
    pop3Props.setProperty("mail.protocol.ssl.trust", "pop3.live.com");
    pop3Props.put("mail.pop3s.ssl.socketFactory", sf);
    pop3Props.setProperty("mail.pop3s.port", "995");

    Session session = Session.getInstance(pop3Props);

    try
    {
    /* Get a Store object*/
       Store store = session.getStore("pop3s");
    //process further activity 
    }
person Jaydip Pansuriya    schedule 19.12.2013