尝试连接到 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 上下文失败
在 javascript/node.js 中连接到 Gmail IMAP API