web-dev-qa-db-ja.com

JavaMailを使用してメールを送信するときのjavax.net.ssl.SSLException

javax.mail.MessagingException: Exception reading response;
  nested exception is:
        javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at com.Sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.Java:1764)
        at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1523)
        at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:453)
        at javax.mail.Service.connect(Service.Java:313)
        at javax.mail.Service.connect(Service.Java:172)
        at javax.mail.Service.connect(Service.Java:121)
        at javax.mail.Transport.send0(Transport.Java:190)
        at javax.mail.Transport.send(Transport.Java:120)
        at javaapplication5.SendMail.send(SendMail.Java:77)
        at javaapplication5.SendMailTest.main(SendMailTest.Java:17)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at com.Sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.Java:523)
        at com.Sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.Java:355)
        at com.Sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:789)
        at com.Sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.Java:1112)
        at com.Sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.Java:744)
        at com.Sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.Java:75)
        at com.Sun.mail.util.TraceInputStream.read(TraceInputStream.Java:106)
        at Java.io.BufferedInputStream.fill(BufferedInputStream.Java:218)
        at Java.io.BufferedInputStream.read(BufferedInputStream.Java:237)
        at com.Sun.mail.util.LineInputStream.readLine(LineInputStream.Java:84)
        at com.Sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.Java:1742)
        ... 9 more

誰かがプロキシを使用してJavaMail APIを使用してメールを送信するのを手伝ってくれる?

23
Rajesh Kumar J

非SSLポートへのSSL接続を試みています。これは機能しません。

Gmail経由でメールを送信する場合は、FAQを参照してください: http://Java.Sun.com/products/javamail/FAQ.html#gmail

Smtp.live.comにあるHotmail SMTPサーバーを介して電子メールを送信しようとすると、同じ例外が発生しました。最後に私のために働いた設定は次のとおりです:

mail.smtp.starttls.enable=true 
mail.smtp.port=587
7
BungleFeet

SSLを使用したくない場合で、smtpsではなくsmtpを使用している場合は、次の設定を試してください。

mail.smtp.starttls.enable=false
mail.transport.protocol=smtp
2
Erich

アンデルセンが答えたように、SSL接続(mail.smtp.ssl.enable=true)を非SSLポートに接続すると、このエラーがスローされます。

多くの一般的なメールサービスはデフォルトのsmtpsポート465の代わりにポート587を使用するため、これは一般に間違ったポートに接続することによって引き起こされます。これは GMailHotmail/Live Mail に適用されます。および Yahoo Mail

しかし、私の問題は、Javaメールは、sslをfalseに設定した場合でもSSLの使用を要求することです。

ソースコードをトレースした後、問題は私が使用した Session.getDefaultInstance 、いくつかのサンプルコードからコピー。最初の呼び出しで、指定されたプロパティを持つセッションのみが作成されます。以降の呼び出しでは、新しいセッションではなく、古いセッションが返されます。

Session.getInstance 渡したプロパティを使用していることを確認し、「SSLException:Unrecognized SSL message」を解決しました。

2
Sheepy

Gmailを使用しているときにこの問題に直面していました。

Gmailを使用するには、「安全性の低いアプリを許可する」をオンにする必要がありました。

このGmailの設定は、 https://www.google.com/settings/security/lesssecureapps にあります。Gmailアカウントにログインすると表示されます。

0
Jose1755