Ответ 1
Чтобы использовать SSL, вы должны изменить свой протокол от SMTP до SMTPS, изменив
trnsport = session.getTransport("smtp");
к
trnsport = session.getTransport("smtps");
Я читал на нескольких сайтах, которые при использовании API JavaMail устанавливают для свойства mail.smtp.ssl.enable
значение true. У меня есть код следующим образом:
props.put("mail.smtp.host", "exchangemail1.example.com");
props.put("mail.from", "[email protected]");
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, "[email protected]");
// 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();
Это отправляет письмо, но:
props.put("mail.debug", "true")
) я вижу, что "isSSL false" (Я также попытался добавить в props.put("mail.smtp.auth","true")
+ user/password....)
Любые идеи, что я делаю неправильно?
Чтобы использовать SSL, вы должны изменить свой протокол от SMTP до SMTPS, изменив
trnsport = session.getTransport("smtp");
к
trnsport = session.getTransport("smtps");
Создайте Java Doc:
Обратите внимание, что если вы используете протокол "smtps" для доступа к SMTP через SSL, все свойства будут называться "mail.smtps. *".
Попробуйте
props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.**ssl.enable", "true");
props.setProperty("mail.smtp.**ssl.required", "true");
Я бы предложил использовать Apache commons-email. Он имеет сеттеры для наиболее часто используемых свойств (включая SSL/TLS) и более дружелюбен к использованию и помещает ontop API JavaMail.
Обновление: я смотрел код commons-email и видел следующие строки:
properties.setProperty("mail.smtp.starttls.enable", this.tls);
properties.setProperty("mail.smtp.auth", "true");
поэтому попробуйте эти свойства.
Это из документа SSLNOTES из JavaMail (выделено мной):
Во-первых, и, возможно, самое простое - установить свойство, позволяющее использовать SSL. Например, чтобы разрешить использование SSL для SMTP-подключений, установите свойство "mail.smtp.ssl.enable" на "true".
В качестве альтернативы вы можете настроить JavaMail для использования одного из SSL-enabled имена протоколов. В дополнение к протоколам JavaMail, отличным от SSL, "imap", "pop3" и "smtp", протоколы "imaps", "pop3s" и "smtps" могут использовать для подключения к соответствующим службам с использованием SSL соединение.
- поддержка STARTTLS
Поддержка STARTTLS доступна в стандартных "imap" и "smtp", протоколов, но должны быть включены путем установки соответствующего свойства, mail.imap.starttls.enable или mail.smtp.starttls.enable, на "true". Если установлено, если сервер поддерживает команду STARTTLS, это будет используется после подключения и перед отправкой любого входа информация.
Поэтому при использовании поддержки STARTTLS кажется, что нет необходимости устанавливать протокол на smtps
.