javamail isSSL false, хотя я установил tls в True при отправке почты - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать javamail для отправки электронного письма.Это работало в Java-приложении.Но я получаю некоторые ошибки, когда использую его в своем веб-приложении Weblogic.

Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTPS");
props.setProperty("mail.smtp.host", "msg.petrochina.com.cn");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.auth", "true");
MailSSLSocketFactory sf = null;
try {
  sf = new MailSSLSocketFactory();
  sf.setTrustAllHosts(true);
} catch (GeneralSecurityException e1) {
  e1.printStackTrace();
}
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.socketFactory", sf);
final Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("dqlhgysbj@petrochina.com.cn", "123456");
}
};

Session session = Session.getDefaultInstance(props, authenticator);
session.setDebug(true);
MimeMessage mimeMessage = new MimeMessage(session);
  mimeMessage.setFrom(new InternetAddress("dqlhgysbj@petrochina.com.cn","dqlhgys"));
  mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("dqlhgysaccept@petrochina.com"));
  mimeMessage.setSubject("test");
  mimeMessage.setSentDate(new Date());
  mimeMessage.setText("testMailContent","utf-8");
  mimeMessage.saveChanges();
  Transport.send(mimeMessage);

Когда я запускаю приложение, я вижу следующее в своем журнале

DEBUG: set            
DEBUG: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "msg.petrochina.com.cn", port 465, isSSL false
220 petrochina.com.cn [20137] ESMTP MTA v8.1.2; Mon, 03 Dec 2018 15:59:04 +0800
DEBUG SMTP: connected to host "msg.petrochina.com.cn", port: 465
EHLO SUNWAY-DEV3
250-petrochina.com.cn
250-SIZE 104857600
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "SIZE", arg "104857600"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
STARTTLS
454 tls initialize failed: ssl accept error. (#4.7.0) (eYou MTA)
    javax.mail.MessagingException: 454 tls initialize failed: ssl accept error. (#4.7.0) (eYou MTA)

Кажется, приложениепытается подключиться без ssl, и он не будет подключаться. Но я могу подключить адрес с telnet. telnet

1 Ответ

0 голосов
/ 03 декабря 2018

Сначала исправьте все эти распространенные ошибки JavaMail .

Затем удалите настройку mail.transport.protocol.(«SMTPS» - неправильное имя протокола, оно должно быть «smtps», но я считаю, что оно игнорируется из-за вышеуказанных проблем, и вы не хотите его из-за свойств, которые вы устанавливаете.)

В зависимости от вашего почтового сервера, вам потребуется либо mail.smtp.ssl.enable для использования SSL при первом подключении к серверу, либо вам нужно mail.smtp.starttls.enable для подключения с использованием основного текста, а затем после подключения переключиться на SSL / TLS.Вам никогда не понадобятся оба.

Надеюсь, это решит вашу проблему.

Но учтите, что вы используете очень старую версию JavaMail, что должно означать, что вы используете очень старую версиюWebLogic.Если возможно, обновитесь до более новой версии WebLogic.

...