Я в течение часа пытался найти правильные настройки для отправки электронной почты из Gmail с помощью javamailsender и, наконец, сделал это. Я публикую это, так как не могу найти исчерпывающий пример для отправки через gmail через javamailsender, так что, надеюсь, это поможет кому-то, кто хочет сделать то же самое:
ШАГ 1:
Добавьте следующие настройки в mail.properties:
mail.protocol=smtp
mail.host=smtp.gmail.com
mail.port=465
mail.smtp.socketFactory.port=465
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.debug=true
mail.smtp.starttls.required=true
mail.smtp.socketFactory.fallback=false
mail.from=XXX@gmail.com
mail.username=XXX@gmail.com
mail.password=my_password
И затем в вашем классе mailConfiguration @Value их в:
@Configuration
@PropertySource("classpath:mail.properties")
public class MailConfiguration {
@Value("${mail.protocol}")
private String protocol;
@Value("${mail.host}")
private String host;
@Value("${mail.port}")
private int port;
@Value("${mail.smtp.socketFactory.port}")
private int socketPort;
@Value("${mail.smtp.auth}")
private boolean auth;
@Value("${mail.smtp.starttls.enable}")
private boolean starttls;
@Value("${mail.smtp.starttls.required}")
private boolean startlls_required;
@Value("${mail.smtp.debug}")
private boolean debug;
@Value("${mail.smtp.socketFactory.fallback}")
private boolean fallback;
@Value("${mail.from}")
private String from;
@Value("${mail.username}")
private String username;
@Value("${mail.password}")
private String password;
@Bean
public JavaMailSender javaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
Properties mailProperties = new Properties();
mailProperties.put("mail.smtp.auth", auth);
mailProperties.put("mail.smtp.starttls.enable", starttls);
mailProperties.put("mail.smtp.starttls.required", startlls_required);
mailProperties.put("mail.smtp.socketFactory.port", socketPort);
mailProperties.put("mail.smtp.debug", debug);
mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
mailProperties.put("mail.smtp.socketFactory.fallback", fallback);
mailSender.setJavaMailProperties(mailProperties);
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setProtocol(protocol);
mailSender.setUsername(username);
mailSender.setPassword(password);
return mailSender;
}
}
Обратите внимание, что на моем сервере Spring включен SSL, поэтому я использую порт 465. Для SSL используется порт 465. Если вы используете 487, вы должны использовать TLS.
ШАГ 2:
Перейдите по этой ссылке и выберите , чтобы включить доступ к менее защищенным приложениям.
https://www.google.com/settings/security/lesssecureapps
ШАГ 3:
Отключите AVAST, если он установлен на вашем компьютере. AVAST Mail Shield конфликтует с рассылкой писем. Если вы не выключите его, вы получите следующую ошибку:
Servlet.service () для сервлета [dispatcherServlet] в контексте с путем
[] выдало исключение [Ошибка обработки запроса; вложенное исключение
org.springframework.mail.MailSendException: соединение с почтовым сервером
не удалось; Вложенным исключением является javax.mail.MessagingException: Exception
чтение ответа; Вложенное исключение:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: не удалось построить путь PKIX:
sun.security.provider.certpath.SunCertPathBuilderException: невозможно
найти действительный путь сертификации к запрошенной цели.