Подтвердить что ты не робот

Javax.net.ssl.SSLException при отправке почты с помощью JavaMail

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 с помощью прокси?

4b9b3361

Ответ 1

Вы пытаетесь выполнить SSL-соединение с портом, отличным от SSL. Это не сработает.

Если вы хотите отправлять почту через gmail, см. FAQ: http://java.sun.com/products/javamail/FAQ.html#gmail

Ответ 2

Я получал такое же исключение при попытке отправить электронную почту через SMTP-сервер Hotmail на smtp.live.com. Вот настройки, которые работали для меня в конце:

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

Ответ 3

Если вы не хотите использовать SSL и используете smtp вместо smtps, попробуйте эти настройки

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

Ответ 4

Как ответил Андерсен, выполнение SSL-соединения (mail.smtp.ssl.enable=true) на не-SSL-порт вызовет эту ошибку.

Это обычно вызвано подключением к неправильному порту, так как многие популярные почтовые службы используют порт 587 вместо порта 465 smtps по умолчанию. Это относится к GMail, Hotmail/Live Mail и Yahoo Почта.

Моя проблема, однако, в том, что Java Mail настаивает на использовании SSL, даже когда я устанавливаю ssl в false.

После отслеживания исходного кода проблема заключается в том, что я использовал Session.getDefaultInstance, скопированный из некоторого примерного кода. Он создает сеанс с заданными свойствами при первом вызове; вызовы подпоследовательности возвращают этот старый сеанс вместо нового сеанса.

Переключившись на Session.getInstance, убедитесь, что он использует свойства, которые я передаю, и решил мое сообщение SSLException: Unrecognized SSL.