尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException

Posted

技术标签:

【中文标题】尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException【英文标题】:javax.mail.MessagingException when attempting to connect to gmail IMAP server 【发布时间】:2020-10-04 14:45:06 【问题描述】:

我正在尝试通过 Gmail imap 协议连接到 gmail 帐户

这是我调用的方法:

public EmailHelper() throws MessagingException, GeneralSecurityException 

        String username = "realemail@gmail.com";
        String password = "emailpassword";
        String server = "imap.gmail.com";

        Properties props = System.getProperties();
        props.setProperty("mail.imap.ssl.enable", "true");
        props.setProperty("mail.store.protocol", "imaps");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.imaps.ssl.checkserveridentity", "false");
        props.put("mail.imaps.ssl.trust", "*");
        props.put("mail.imaps.ssl.socketFactory", sf);

        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("imaps");


        store.connect(server, username, password);

这是我得到的例外:

 Exception in thread "main" javax.mail.MessagingException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我已经阅读并尝试了其他问题中发布的解决方案,但它们对我不起作用。我想我错过了什么

我们将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

经过 3 小时的修补/调试,我终于解决了这个问题。事实证明,avast 导致了这个 SSL 错误,禁用它使代码工作。

【讨论】:

【参考方案2】:

session.getStore("imaps") 是我通常不使用的东西。相反,您可以将协议作为属性的一部分提供。

我的最佳猜测是您收到错误消息,因为您当时并没有真正连接到谷歌。

Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.ssl.enable", "true");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.timeout", "10000");
props.setProperty("mail.imaps.connectiontimeout", "10000");

try 

    Session session = Session.getInstance(props, null);
    Store store = session.getStore();
    store.connect("imap.gmail.com", user, password);
    Folder inbox = store.getFolder("INBOX");

    System.out.println("Connected!");

 catch(Exception e) 
  e.printStackTrace();

【讨论】:

异常是否告诉您错误的服务器名称?您是否在使用的代码中设置了任何其他系统属性?仅使用我提供的代码,我就可以毫无问题地连接到 Gmail。也许你摆弄了cacerts? 原来 Avast 是所有麻烦的根源。

以上是关于尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 通过 IMAP 连接到 Gmail - SSL 上下文失败

访问 Gmail API 时出现错误请求

在 javascript/node.js 中连接到 Gmail IMAP API

尝试连接到 localhost phpmyadmin 时出现错误

当我尝试连接到 mongodb 时出现这些错误

当我尝试连接到 mongodb 时出现这些错误