Статьи

Использование Gmail в качестве SMTP-сервера из Java, приложений Spring Boot

Пользователи Gmail могут использовать SMTP-сервер Gmail smtp.gmail.com для отправки электронных писем из своих приложений Spring Boot. Для этого давайте сделаем некоторые настройки в приложении:

  1. Укажите свойства SMTP-соединения в файле application.properties :
    1
    2
    3
    4
    5
    6
    7
    spring.mail.host=smtp.gmail.com
    spring.mail.username=<your gmail/google app email>
    spring.mail.password=*****
    spring.mail.port=587
    spring.mail.properties.mail.smtp.starttls.enable=true
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.required=true
  2. Используйте библиотеку инструментов Spring Boot Email — которая является оболочкой для начальной библиотеки Spring Boot Email. Добавьте следующее в ваш pom.xml :
    1
    2
    3
    4
    5
    <dependency>
        <groupId>it.ozimov</groupId>
        <artifactId>spring-boot-email-core</artifactId>
        <version>0.6.3</version>
    </dependency>
  3. Пометьте основной класс вашего приложения (т. Е. Класс, аннотированный @SpringBootApplication ) с помощью @EnableEmailTools :
    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @EnableEmailTools
    public class EmailApplication {
        public static void main(String[] args){
            SpringApplication.run(EmailApplication.class, args);
        }
    }
  4. Давайте напишем тест, который использует bean- компонент it.ozimov.springboot.mail.service.EmailService для отправки электронного письма:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class EmailServiceTest {
        @Autowired
        it.ozimov.springboot.mail.service.EmailService emailService;
     
        @Value("${spring.mail.username}") String fromEmail;
        @Test
        public void testSendEmail() throws UnsupportedEncodingException {
            User user = new User();
            user.setEmail("[email protected]");
            user.setDisplayName("Mohamed Sanaulla");
            final Email email = DefaultEmail.builder()
                .from(new InternetAddress(fromEmail, "From Name"))
                .to(Lists.newArrayList(new InternetAddress(
                    user.getEmail(), user.getDisplayName())))
                .subject("Testing email")
                .body("Testing body ...")
                .encoding("UTF-8").build();
            emailService.send(email);
        }
    }

Если все хорошо, вы должны получить электронное письмо в свой почтовый ящик.

Но не все было хорошо, когда я попробовал приведенный выше код, и проблема, с которой я столкнулся, была следующим исключением:

1
2
3
4
5
6
7
8
9
Caused by: javax.mail.AuthenticationFailedException: 534-5.7.14
<https://accounts.google.com/signin/continue?sarp=1≻c=1&plt=AKgnsbs2
534-5.7.14 tEY84q9p029iw1YKFy_d8O1vYNwHLixZUNHZlZbIqZki9a-EBfcUTPIenD2i6pN704O_7S
534-5.7.14 DK4FC-8-l1K1gU537F4UxjN4v4_txZ5pqxEA8ATwDhmOBzvxAYApfJTQjHL1yhHouwbhGO
534-5.7.14 LhOzSAB6Va6u-enaDfcv73dEgv1TT4b19dBfgzIkOoz_7nJ3i-LwWxZqIRyxOEnu8iNIYQ
534-5.7.14 iV27v9s4HFOrpSOJNGufv1Hg0wU5s> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/answer/78754 q6sm2366693pgp.58 - gsmtp

Причиной этой ошибки было то, что моя электронная почта Gmail / G Suite (т.е. электронная почта с использованием настраиваемого домена) не была настроена для отправки электронной почты из менее безопасных приложений, таких как наше. Для этого вам необходимо посетить: https://www.google.com/settings/security/lesssecureapps и включить переключатель « Разрешить менее безопасные приложения », который выглядит следующим образом:

Иногда, когда вы посещаете ссылку на менее безопасные приложения, вы видите что-то, как показано ниже:

В таком случае вы можете использовать G Suite, и вам нужно, чтобы ваш администратор включил функцию менее безопасных приложений, и это можно сделать, выполнив следующие действия:

  1. Перейдите на страницу http://google.com/a/ < домена >
  2. Перейдите к настройке безопасности из меню, как показано на рисунке ниже:
  3. Нажмите « Основные настройки » на странице настроек безопасности, как показано ниже:
  4. На странице «Основные настройки» найдите раздел « Менее безопасные приложения » и нажмите « Перейти к настройкам для менее защищенных приложений », как показано ниже:
  5. Теперь на странице Менее безопасные приложения у вас есть следующие опции:
    Выберите « Разрешить пользователям управлять своим доступом к менее защищенным приложениям » и нажмите кнопку « Сохранить» , доступную внизу страницы. Это позволит отдельным пользователям контролировать доступ к своей электронной почте из менее безопасных приложений.

Теперь перейдите на страницу https://www.google.com/settings/security/lesssecureapps, и теперь вы сможете увидеть переключатель для обновления параметра « Разрешить менее безопасные приложения ».