Ssl javamail:在明确配置imap和143时接收来自993的电子邮件?我正在使用getInstance()
我正在将我的web项目部署到客户机环境中,在那里我们被告知不要使用SSL和IMAPS。因此,我们配置了以下属性:Ssl javamail:在明确配置imap和143时接收来自993的电子邮件?我正在使用getInstance(),ssl,jakarta-mail,imap,Ssl,Jakarta Mail,Imap,我正在将我的web项目部署到客户机环境中,在那里我们被告知不要使用SSL和IMAPS。因此,我们配置了以下属性: mail.recv.protocol=imap mail.recv.port=143 但根据客户机-服务器日志,我们得到了以下异常: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExcep
mail.recv.protocol=imap
mail.recv.port=143
但根据客户机-服务器日志,我们得到了以下异常:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
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
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:695)
at javax.mail.Service.connect(Service.java:345)
at javax.mail.Service.connect(Service.java:226)
并且提供了其他信息,我们是通过993连接的,因此我们找不到证书,因为jvm要求它。但我们必须通过143连接
通过这些代码,我们可以实现连接。如您所见,我们没有使用getDefaultInstance()
进行连接
input = CorreoAction.class.getResourceAsStream("/config/properties/mail.properties"); //we load `prop` from file
Properties prop = new Properties();
prop.load(input);
.....
prop1 = new Properties(); //we copy prop to prop1 for `store`
prop1.setProperty("mail.imap.connectiontimeout", "5000");
prop1.setProperty("mail.imap.timeout", "5000");
prop1.setProperty("mail.imap.host", prop.getProperty("mail.recv.host"));
prop1.setProperty("mail.imap.port", prop.getProperty("mail.recv.port"));
prop1.setProperty("mail.imap.ssl.trust", "*");
prop1.setProperty("mail.imap.auth.plain.disable", "false");
sesion = Session.getInstance(prop1); //connect with sesion.
store = sesion.getStore(prop.getProperty("mail.recv.protocol")); //imap, not imaps.
store.connect(prop.getProperty("mail.recv.host"), prop.getProperty("mail.recv.user"), prop.getProperty("mail.recv.pass"));
所以,问题是:如果我们强迫它使用143和imap,为什么应用程序连接到993 我怀疑你没有得到你认为你得到的财产。表演什么?再次谢谢你,比尔。嗯,我倾向于打开它,但在客户的环境中,我们关闭了它。另一件事是,尽管在我的代码中,我从WAR中的
.properties
文件中读取了prop,但在客户的机器中,他们以某种方式将其指向另一个文件,在该文件中,他们操纵自己的参数以满足银行的安全要求。我不知道他们是如何做到这一点的,但当他们更改.properties
文件中的参数时,出现了不同的错误,所以我想这是可行的。当然,他们用imap
代替imaps
,还有143
。这可能是原因吗?正确发送属性是成功与失败的区别。如果不确切知道他们设置了什么,很难说他们做错了什么。