私はsmtp経由で電子メールを送信するためにJavaメールを使用しています。 SMTP設定は以下の通り:sslなしのJavaメール - PKIXパス構築に失敗しました:
Properties props = new Properties();
Object put = props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.user", smtpUser);
props.put("mail.smtp.auth", true);
props.put("mail.debug", mailDebug);
props.put("mail.smtp.port", port);
SMTP資格情報は、上記の詳細と私のsmtpHostにtelnet接続によって検証されています。しかし、上記の設定をJavaメールで使用すると、以下の例外が発生します。それは、再び同じ認証失敗例外を発生さ
props.put("mail.smtp.starttls.enable", false);
:私は行を追加し
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed
Nov 29, 2012 11:54:40 AM com.Test main
SEVERE: null
javax.mail.AuthenticationFailedException: 535 Incorrect authentication data
。 、2番目の例外に関する様々なフォーラムのスレッドを通過した後
220 TLS go ahead
Nov 28, 2012 5:32:36 PM com.Test main
SEVERE: null
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:1918)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
at javax.mail.Service.connect(Service.java:317)
:
は私がmail.smtp.starttls.enable真には、認証が成功した場合、私は、次の例外を取得しますInstallCertプログラムを実行して、サーバーの自己署名証明書を取得しました。 InstallCertは、次の例外がスローされます。
Opening connection to mydomain.com.au:443...
Starting SSL handshake...
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:542)
at sun.security.ssl.InputRecord.read(InputRecord.java:374)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:850)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1190)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1217)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1201)
at InstallCert.main(InstallCert.java:100)
Could not obtain server certificate chain
だから、私のサーバーがSSLを持っていないように見えますが、STARTTLSが有効になっています。 STARTTLSを使用してメールを送信するための正しいパラメータは、sslがないサーバには何ですか?
に春ブーツを使用した場合。 FAQに説明されているようにInstallCertを使用しましたが、「javax.net.ssl.SSLException:認識できないSSLメッセージ、平文接続ですか?」という例外がありました。私のサーバーはSSLをまったく使用していないようです。 – janenz00
InstallCert例外についても私の質問を編集しました。 – janenz00
InstallCertの問題点は、InstallCertがSSL接続を開始できる場合にのみ機能することです。サーバーがSSL(TLS)接続に変換するプレーンテキスト接続のみをサポートしている場合、InstalCertは役に立ちません。 [MailSSLSocketFactory](http://javamail.kenai.com/nonav/javadocs/com/sun/mail/util/MailSSLSocketFactory.html)クラスを見れば、自分で署名したものを扱いやすくなりますそれ以外の場合は検証されません。 –