2013-06-13 16 views
7

私はここや他の場所でいくつかの関連記事を検索しましたが、いずれも私の問題を解決しませんでした。私は "javamail API"を使って一連の人に電子メールを送るプログラムを持っています。それは一度うまくいきました。Javaプログラムが自分のGmailアカウントを使用して電子メールの送信を停止しました

public void sendEmail(String userName, String password, String toAddress, 
     String subject, String message, String[] attachFiles) 
     throws AddressException, MessagingException { 

    // sets SMTP properties 
    Properties properties = new Properties(); 
    properties.put("mail.smtp.host", "smtp.gmail.com"); 
    properties.put("mail.smtp.port", "587"); 
    properties.put("mail.smtp.auth", "true"); 
    properties.put("mail.smtp.starttls.enable", "true"); 
    properties.put("mail.user", userName); 
    properties.put("mail.password", password); 

    // creates a new session with an authenticator 
    Authenticator auth = new SMTPAuthenticator(userName, password); 
    Session session = Session.getInstance(properties, auth); 

    // creates a new e-mail message 
    MimeMessage msg = new MimeMessage(session); 

    try { 
     msg.setFrom(new InternetAddress(userName, "My name")); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    InternetAddress[] toAddresses = {new InternetAddress(toAddress)};   
    msg.setRecipients(Message.RecipientType.TO, toAddresses); 
    msg.setSubject(subject); 
    msg.setSentDate(new Date()); 

    // creates message part 
    MimeBodyPart messageBodyPart = new MimeBodyPart(); 
    messageBodyPart.setContent(message, "text/html"); 

    // creates multi-part 
    Multipart multipart = new MimeMultipart(); 
    multipart.addBodyPart(messageBodyPart);  

    // adds attachments 
    if (attachFiles != null && attachFiles.length > 0) { 
     for (String filePath : attachFiles) { 
      addAttachment(multipart, filePath); 
     } 
    } 

    // sets the multi-part as e-mail's content 
    msg.setContent(multipart); 

    // sends the e-mail 
    Transport.send(msg); 

} 

だから、今試みは(私は、JDK 1.7を使用しています、私は次のようなエラー を得、このメソッドを呼び出すために:今日私のsendEmailメソッドは以下の通りです...私は再び必要ですが、私はすべての電子メールを送信することはできません.0_21):それは前に働いていたので、私のGmailは(これとは何かを持っている場合

Sending email Failed... 

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 EmailSender.sendEmail(EmailSender.java:86) 
    at CFP_LaWasp_EmailSender.sendCFPLaWasp(CFP_LaWasp_EmailSender.java:178) 
    at CFP_LaWasp_EmailSender.main(CFP_LaWasp_EmailSender.java:220) 
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 sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 
    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) 
    ... 9 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:385) 
    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:326) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323) 
    ... 19 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:196) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) 
    ... 25 more 

私はまた、私にはわからない...この問題を解決する方法がわからない、それならばこのアクセスをブロックしました...)

何か助けていただきありがとうございます。

答えて

24

キーエラーはこれです:sun.security.provider.certpath.SunCertPathBuilderException:によって引き起こさ

要求されたターゲットへの有効な証明書パスを見つけることができません

this JavaMail FAQ entryを参照してください。

Gmailに接続しているので、これは起こりません。最も可能性の高い原因は次のとおりです。

  • リクエストを傍受するファイアウォールまたはウイルス対策プログラムがあります。
  • あなたは私が苦労してきた
+8

に春ブーツを使用した場合、私は最終的に問題を発見しました!アプリケーションをブロックするのはアンチウイルスでした。どうもありがとう! – user2484053

+0

あなたのヒントは多くの助けになりました:-) – user2484053

+2

これは助けてくれました。私の場合、avastはそれをやっていました。 –

5

信頼できる認証局のJDKのリストをオーバーライドしているアプリケーションサーバーで実行している、信頼できる認証局を見つけることからそれを防止JDKインストール中に何か問題がありますこのエラーは数時間続きます。 Bil Shannonが提供する答えを使用してサーバー証明書をインストールしようとしました。何も働かなかった。

私の問題はAVAST Antivirusでした。 Avast Mail Shieldを無効にすると、私はWebアプリケーションからGmailアカウントを介してメールを送信することができました。

+1

私も - 愚かなAVAST。 – Simon

+1

そうですね、それは上記の私の最初の箇条書きです。 –

0

このプロパティの問題を更新する

properties.put( "mail.smtp.ssl.trust"、 "smtp.gmail.com")

を解決した後、私は、Java 8でこの問題を抱えていましたapplication.property

spring.mail.properties.mail.smtp.ssl.trust = smtp.gmail.com

関連する問題