2013-04-19 5 views
1

Я посылаю письмо, используя этот кодОтправка почты с помощью Java почты ошибка

public static void main(String[] args) { 

    final String username = "[email protected]"; 
      final String password = "myGmailPassword"; 

      Properties props = new Properties(); 
      props.put("mail.smtp.auth", true); 
      props.put("mail.smtp.starttls.enable", true); 
      props.put("mail.smtp.host", "smtp.gmail.com"); 
      props.put("mail.smtp.port", "587"); 

      Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
       }); 

      try { 

       Message message = new MimeMessage(session); 
       message.setFrom(new InternetAddress("[email protected]")); 
       message.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse("[email protected]")); 
       message.setSubject("Testing Subject"); 
       message.setText("Dear Mail Crawler. hello"); 

       Transport.send(message); 

       System.out.println("Done"); 

      } catch (MessagingException e) { 
       throw new RuntimeException(e); 
      } 
     } 
} 

И тогда это возвращенное мне вложенное исключение. StackTrace настолько огромен, я понятия не имею, где начать смотреть или как отлаживать этот

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not convert socket to TLS; 
    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 Test.main(Test.java:44) 
Caused by: javax.mail.MessagingException: Could not convert socket to TLS; 
    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.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666) 
    at javax.mail.Service.connect(Service.java:367) 
    at javax.mail.Service.connect(Service.java:226) 
    at javax.mail.Service.connect(Service.java:175) 
    at javax.mail.Transport.send0(Transport.java:253) 
    at javax.mail.Transport.send(Transport.java:124) 
    at Test.main(Test.java:39) 
Caused by: 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.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649) 
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) 
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235) 
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206) 
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136) 
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) 
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149) 
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:528) 
    at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:465) 
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902) 
    ... 7 more 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217) 
    at sun.security.validator.Validator.validate(Validator.java:218) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249) 
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185) 
    ... 17 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318) 
    ... 23 more 
+0

может быть дубликат http://stackoverflow.com/questions/16040070/sending-email-using-java-netbeans-exceptions/16040769#16040769 – NullPointerException

+0

Используйте javamail-1.4.7 jar! – NINCOMPOOP

+0

Я уже использую javamail-1.4.7 – user962206

ответ

0
Caused by: javax.mail.MessagingException: Could not convert socket to TLS; 
    nested exception is: 

Ваш SMTP сервер настаивает на TLS (Transport Layer Security) для шифрованной передачи и не может проверить сервер сертификат.

+0

что делать? – user962206

+0

Существует свойство JVM «-D», которое вы можете установить для игнорирования недействительных сертификатов (я думаю, что он включает самозаверяющие сертификаты, которые являются наиболее распространенной причиной). Я дал руководство по этому вопросу. Я уверен, что вы можете отследить флаги. –

0

Пожалуйста, определите свойства, как (с помощью альтернативы TLS):

Properties props = new Properties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "465"); 

.... 

Смотрите, если это работает.

+0

Я связал это, но ничего не показывает, никаких исключений. Я предполагаю, что у меня есть таймаут соединения? – user962206

+0

Добавьте инструкции System.out.println() в различные части вашего кода, чтобы увидеть, где выполнение кода «появляется» для остановки. Используйте блоки try-catch с блоком catch, имеющим вызов printStackTrace() в экземпляре Exception. try {} catch (Исключение e) {e.printStackTrace(); } – 2013-04-20 01:44:10

Смежные вопросы