我想从我的Java发送电子邮件,我无法连接到我的主机。 这里我的代码:Javamail - 无法连接到SMTP主机
public class sendEmail implements Runnable{
@Override
public void run(){
try{
final String username = "user", password = "pass", from = "[email protected]", to = "[email protected]";
Properties props = new Properties();
props.setProperty("mail.smtp.user", username);
props.setProperty("mail.smtp.host", "mail.host.com");
props.setProperty("mail.smtp.ssl.enable", "true");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.starttls.enable", "true");
props.setProperty("mail.smtp.debug", "true");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(true);
Message msg = new MimeMessage(session);
try{
msg.setSubject("Test SMTP");
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
Transport transport = session.getTransport("smtp");
transport.connect("mail.itbuntuksemua.com", username, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
System.out.println("Done");
}catch(MessagingException | NumberFormatException | HeadlessException ex){
ex.printStackTrace();
}
}catch(UnknownHostException | NumberFormatException ex){
ex.printStackTrace();
}
}
}
,在这里我SMTPAuthenticator()
代码:
private class SMTPAuthenticator extends javax.mail.Authenticator {
@Override
public PasswordAuthentication getPasswordAuthentication() {
String username = "user";
String password = "pass";
return new PasswordAuthentication(username, password);
}
}
,并在这里再次,我的报告的错误:
DEBUG:setDebug:JavaMail的版本1.4.7 DEBUG :getProvider()返回javax.mail.Provider [TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP:useEhlo true,useAuth true DEBUG SMTP:尝试连接到主机“mail.host.com”,端口465,isSSL为true javax.mail.MessagingException:无法连接到SMTP主机:mail.host.com,端口:465; 嵌套的异常是: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书路径,请求目标 at com。 sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654) at javax.mail.Service.connect(Service.java: 295) at javax.mail.Service.connect(Service.java:176) at scam.ccChecker $ sendEmail.run(ccChecker.java:186) at java.lang.Thread.run(Thread.java:745) 引起:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun .security.provider.certpath.SunCertPathBuilderException:在sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl。)上无法找到有效的证书路径到要求的目标 。 java:1937) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker。 server.certificate(ClientHandshaker.java:1478) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:957) at sun.security。 ssl.Handshaker.process_record(Handshaker.java:892) at sun.security.ssl.SSLSocketImpl.readRecord(SSL Socket.mpl.java:1050) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391) at sun.security.ssl。 SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375) at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927) ... 5更多 引起: sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 处于sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) sun.security.validator处的请求目标 的有效证书路径.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl。checkTrusted(X509TrustManagerImpl.java:229) 在sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 在sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1460) ... 16个 原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书路径到要求的目标 at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145) at sun.security.provider .certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ... 22更多
有人可以帮我吗? :(
看起来像(猜测)他们正在使用自签名证书。 –
[PKIX路径构建失败的可能重复:无法找到所需目标的有效证书路径](http://stackoverflow.com/questions/4062307/pkix-path-building-failed-unable-to-find-valid-certification -path-to-requested) – rjdkolb
您可能没有该邮件服务器的证书。 – Just1689