2012-09-11 92 views
1

使用以下代码从Zimbra邮件服务器读取邮件。JavaMail错误+无法识别的SSL消息,明文连接?

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 

任何人都可以就如何解决这方面的帮助?

+0

与此代码试图 属性道具=新特性(); props.put(“mail.pop3.auth”,true); props.put(“mail.pop3.starttls.enable”,true); Session session = Session.getDefaultInstance(props,null); session.setDebug(true); Store store = session.getStore(“pop3”); store.connect(主机,用户名,密码); Folder folder = store.getFolder(“INBOX”); ERROR --- javax.mail.AuthenticationFailedException:仅在com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:146)进入TLS模式后有效 \t在javax.mail.Service.connect( Service.java:275) 我将不胜感激,如果有人可以帮助这个代码? – Akbar

回答

5

读这个list of common mistakes然后清理你的代码。

Gmail example也应该为你工作,虽然显然你需要改变主机名。

+0

Bill,仍然会出现相同的错误--- javax.mail.AuthenticationFailedException:只有在进入TLS模式后才有效CODE - 属性props = System.getProperties(); Session session = Session.getInstance(props,null); session.setDebug true); Store store = session.getStore(“pop3”); store.connect(host,110,username,password); – Akbar

+0

已添加(props.put(“mail.pop3.starttls.enable”,true);)并使用最新的JavaMail API进行了测试,现在得到此错误javax.mail.MessagingException:连接失败;嵌套的异常为: java.io. IOException:无法将套接字转换为com.sun.mail.pop3.POP3Store.protocolConnect处的TLS(POP3Store.java:210) 导致:java.io.IOException:无法将套接字转换为TLS 引起:javax.net .ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到要求的目标的有效证书路径 – Akbar

+1

http://www.oracle.com/technetwork/爪哇/的JavaMail/FAQ/index.html的#installcert –

0

这将帮助你绕过认证过程,并直接得到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 
    } 
相关问题