javax.net.ssl.SSLException при отправке почты с использованием JavaMail - PullRequest
23 голосов
/ 21 июля 2009
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, используя прокси?

Ответы [ 5 ]

15 голосов
/ 21 июля 2009

Вы пытаетесь установить соединение SSL с портом без SSL. Это не будет работать.

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

7 голосов
/ 07 марта 2010

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

mail.smtp.starttls.enable=true 
mail.smtp.port=587
2 голосов
/ 16 июня 2016

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

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

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

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

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

2 голосов
/ 23 августа 2013

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

mail.smtp.starttls.enable=false
mail.transport.protocol=smtp
0 голосов
/ 24 марта 2018

Я столкнулся с этой проблемой при использовании Gmail.

Чтобы использовать Gmail, мне пришлось включить «Разрешить менее безопасные приложения» .

Этот параметр Gmail можно найти по адресу https://www.google.com/settings/security/lesssecureapps после входа в учетную запись Gmail.

...