Нераспознанное сообщение SSL при отправке почты с локального хоста с использованием STARTTLS
В настоящее время я изучаю почтовый сервер James, и на моем локальном компьютере работает экземпляр. Я пытаюсь отправить электронное письмо, используя приведенный ниже код, и столкнулся с исключением, перечисленным ниже:
public static void send() {
try {
String host = "127.0.0.1";
Properties props = System.getProperties();
props.put("mail.host", host);
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.auth", "true");
props.put("mail.smtps.port", "465");
props.put("mail.smtps.ssl.trust", host);
Session mailSession = Session.getInstance(props);
mailSession.setDebug(true);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(frAddress));
InternetAddress[] address = { new InternetAddress(toAddress) };
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(message);
Transport transport = mailSession.getTransport("smtps");
transport.connect(host, userName, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
Ниже приведено исключение в transport.connect(host, userName, password)
DEBUG: setDebug: JavaMail version 1.4.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "127.0.0.1", port 465, isSSL true
DEBUG SMTP: exception reading response: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
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:291)
at javax.mail.Service.connect(Service.java:172)
at com.spectramd.securemail.bouncycastle.JavaMailTest.send(JavaMailTest.java:50)
at com.spectramd.securemail.bouncycastle.JavaMailTest.main(JavaMailTest.java:24)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:106)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:84)
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1742)
... 6 more
Я выполнил шаги, перечисленные здесь, чтобы настроить сервер James для запуска по SSL, а также добавил фиктивный сертификат JKS в соответствии с шагами. Я искал онлайн, но пока не могу найти решение. Пожалуйста, помогите.
РЕДАКТИРОВАТЬ:
Забыл упомянуть, я успешно могу отправлять письма, используя обычный SMTP с конфигурациями по умолчанию, с которыми поставляется Джеймс.
1 ответ
Ну, похоже, Джеймс не настроен должным образом. Если вы используете telnet для подключения к нему через порт 465, вы получаете простой текстовый ответ?
Кроме того, вы используете довольно старую версию JavaMail. Вы можете обновить до последней версии.