JavaMail mail.smtp.ssl.enable не работает - PullRequest
11 голосов
/ 11 января 2010

Я читал на нескольких сайтах, что при использовании API JavaMail установить для свойства mail.smtp.ssl.enable значение true. У меня есть некоторый код следующим образом:

props.put("mail.smtp.host", "exchangemail1.example.com");
props.put("mail.from", "myemail@example.com");
props.put("mail.smtp.starttls.enable", "true");
// I tried this by itself and also together with ssl.enable)
props.put("mail.smtp.ssl.enable", "true");

Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, "me.at@example.com");  
    // also tried @gmail.com
msg.setSubject("JavaMail ssl test");
msg.setSentDate(new Date());
msg.setText("Hello, world!\n");
props.put("mail.smtp.auth", "false");

Transport trnsport;
trnsport = session.getTransport("smtp");
trnsport.connect();
msg.saveChanges(); 
trnsport.sendMessage(msg, msg.getAllRecipients());
trnsport.close();

Это отправляет электронное письмо, но:

  1. когда я делаю захват трафика, я вижу, что он не зашифрован
  2. При использовании отладки (props.put("mail.debug", "true")) я вижу, что "isSSL false"

(я также пытался выше добавить props.put("mail.smtp.auth","true") + user / password ....)

Есть идеи, что я делаю не так?

Ответы [ 5 ]

14 голосов
/ 15 января 2011

Для использования SSL вы должны изменить свой протокол с SMTP на SMTPS , изменив

trnsport = session.getTransport("smtp");

до

trnsport = session.getTransport("smtps");
7 голосов
/ 30 мая 2011

Форма Java Doc :

Обратите внимание, что если вы используете протокол "smtps" для доступа к SMTP через SSL, все свойства будут называться "mail.smtps. *".

4 голосов
/ 02 июля 2013

Попробуйте

props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.**ssl.enable", "true");
props.setProperty("mail.smtp.**ssl.required", "true");
2 голосов
/ 05 сентября 2016

Это из SSLNOTES документа из JavaMail (выделение добавлено):

Во-первых, и, возможно, самое простое, это установить свойство, позволяющее использовать SSL. Например, чтобы включить использование SSL для SMTP-соединений, установите свойство "mail.smtp.ssl.enable" в "true".

Кроме того, вы можете настроить JavaMail на использование одного из с включенным SSL имена протоколов . В дополнение к не-SSL протоколам JavaMail "imap", «pop3» и «smtp», протоколы «imaps», «pop3s» и «smtps» могут использоваться для подключения к соответствующим службам с использованием SSL подключение.

- поддержка STARTTLS

Поддержка STARTTLS доступна в стандартных «imap» и «smtp» протоколы, но должны быть включены путем установки соответствующего свойства, mail.imap.starttls.enable или mail.smtp.starttls.enable , в значение "true". Если установлено, если сервер поддерживает команду STARTTLS, оно будет используется после установления соединения и перед отправкой любого логина информация.

Таким образом, при использовании поддержки STARTTLS кажется, что нет необходимости устанавливать протокол на smtps.

2 голосов
/ 11 января 2010

Я бы предложил использовать Apache commons-email .У него есть сеттеры для наиболее часто используемых свойств (включая SSL / TLS), и он более удобен в использовании и находится поверх API JavaMail.

Обновление: я просматривал код адреса электронной почты и увидел следующие строки:

properties.setProperty("mail.smtp.starttls.enable", this.tls);
properties.setProperty("mail.smtp.auth", "true");

Итак, попробуйте и эти свойства.

...