我正在尝试运行一个独立的Java类,它将以imap的形式连接到Gmail。这是代码摘录(用户名和传递掩码)
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imap");
System.out.println("getting session");
Session session = Session.getInstance(props);
System.out.println("getting store");
Store store = session.getStore("imaps");
System.out.println("connecting");
store.connect("imap.gmail.com", "xxxxx", "yyyyyy");当尝试运行时,它会显示“连接”消息,但会抛出以下消息
javax.mail.MessagingException: 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: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target我完成了以下步骤:
keytool -keystore cacerts -import -trustcacerts -alias gmailcert -file c:\gmailcert.pem -storepass changeit上面的步骤在这个文件夹C:\Program \Amazon Corretto\jdk11.0.6_10\lib\security中
在运行类的Eclipse中,我设置了这些jvm args
-Djavax.net.ssl.trustStore="c:/Program Files/Amazon Corretto/jdk11.0.6_10/lib/security/cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"我也试过
-Djavax.net.ssl.trustStore="c:\Program Files\Amazon Corretto\jdk11.0.6_10\lib/security\cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"和
-Djavax.net.ssl.trustStore="c:\\Program Files\\Amazon Corretto\\jdk11.0.6_10\\lib\\security\\cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"我还参考了这个站点,以确保我导入的gmail证书是正确的。然后我运行了一个SSLPoke实用程序并获得了相同的错误,所以这与我获取和导入证书的方式有关。
我遗漏了什么?
发布于 2020-03-20 20:08:38
很可能你有一个反病毒程序来拦截连接。如果您可以将其配置为允许从您的程序直接连接,则会更好。缺少这一点,请参阅JavaMail常见问题获得证书的帮助。
https://stackoverflow.com/questions/60750366
复制相似问题