【问题标题】:JavaMail error + Unrecognized SSL message, plaintext connection?JavaMail错误+无法识别的SSL消息,明文连接?
【发布时间】:2012-09-11 09:35:18
【问题描述】:

使用以下代码从 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

谁能帮忙解决这个问题?

【问题讨论】:

  • 尝试使用此代码 Properties props = new Properties(); props.put("mail.pop3.auth",true); props.put("mail.pop3.starttls.enable", true);会话会话 = Session.getDefaultInstance(props, null); session.setDebug(true);商店商店= session.getStore("pop3"); store.connect(主机,用户名,密码);文件夹文件夹 = store.getFolder("INBOX");错误--- javax.mail.AuthenticationFailedException:仅在 javax.mail.Service.connect(Service.java:275) 的 com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:146) 进入 TLS 模式后有效如果有人可以帮助解决此代码,我将不胜感激?

标签: jakarta-mail pop3 zimbra


【解决方案1】:

阅读此list of common mistakes,然后清理您的代码。

Gmail example 也应该适合您,但显然您需要更改主机名。

【讨论】:

  • Bill,仍然出现同样的错误--- 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(host,110,username,password);
  • 已添加(props.put("mail.pop3.starttls.enable", true);) 并使用最新的 JavaMail API 进行测试,现在收到此错误 javax.mail.MessagingException:Connect failed;nested exception是:java.io.IOException:无法在 com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:210) 将套接字转换为 TLS 原因:java.io.IOException:无法将套接字转换为 TLS 原因:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径
【解决方案2】:

这将帮助您绕过证书过程并直接访问 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 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 2011-09-25
    • 2015-03-23
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多