Я пытаюсь отправить электронную почту с моей 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) на javax.mail.Service.connect (Service.java:176) на scam.ccChecker $ sendEmail.run (ccChecker.java:186) на java.lang.Thread.run (Thread.java:745) Вызвано: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun .security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели at 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. serverCertificate (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 SocketImpl.java:1050) на sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1363) на sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1391) в sun.security.ssl. SSLSocketImpl.startHandshake (SSLSocketImpl.java:1375) на com.sun.mail.util.SocketFetcher.configureSSLSocket (SocketFetcher.java:549) на com.sun.mail.util.SocketFetcher.createSocket (SocketFetcher.java:354) в com.sun.mail.util.SocketFetcher.getSocket (SocketFetcher.java:211) в com.sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.java:1927) ... 5 более Вызванный: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найдите действительный путь сертификации для запрошенной цели at sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:387) at sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:292) at 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) на java.security.cert.CertPathBuilder.build (CertPathBuilder.java:280) на sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:382) ... 22 подробнее
Может кто-нибудь мне помочь? :(
Похоже, что (при догадках) они используют самозаверяющий сертификат. –
Возможный дубликат [PACIX path building failed: невозможно найти допустимый путь сертификации для запрошенной цели] (http://stackoverflow.com/questions/4062307/pkix-path-building-failed-unable-to-find-valid-certification -path-to-request) – rjdkolb
Возможно, у вас нет сертификата для этого почтового сервера. – Just1689