Статьи
YouTube-канал
Отзывы

Как отправлять email в Spring Boot (kotlin)

Видеогайд Исходники

20 декабря 2021

Тэги: gradle, Kotlin, Spring, Spring Boot, YouTube.

Рассмотрим как отправлять email в Spring Boot. Вы также можете посмотреть исходники этого примера на github. Данный материал также доступен в формате видео на YouTube.

Для начала создадим новый gradle-проект (проще всего это сделать с помощью Spring Initializr). В проекте должна быть такая зависимость (пример для gradle):

implementation("org.springframework.boot:spring-boot-starter-mail")

Стартер spring-boot-starter-mail добавляет саму функциональность работы с email, причём можно использовать обёртку над стандартным классом Java.

Создадим новый сервис EmailService и внедрим в него JavaMailSender, а также пару свойств из конфига.

@Service
class EmailService(
        private val javaMailSender: JavaMailSender,
        @Value("\${spring.mail.sender.email}") private val senderEmail: String,
        @Value("\${spring.mail.sender.text}") private val senderText: String
)

В файл application.yml добавим такие параметры:

spring:
  mail:
    host: mail.example.com
    port: 25
    username: username
    password: "pa$$w0rd"
    test-connection: true # проверить подключение при старте приложения
    sender: # отправитель письма (его почта и имя)
      email: no-reply@example.com
      text: no-reply

Тут мы указываем хост и порт нашего mail-сервера, а также логин/пароль для доступа к нему. Параметр test-connection отвечает за проверку подключения к серверу при старте приложения. Параметр sender.email содержит email, который должен быть указан в качестве отправителя, а sender.text - произвольное текстовое название для этого email.

Теперь добавим в наш сервис пару методов. Отправка простого текстового письма без форматирования выглядит так:

fun sendSimpleEmail(receiver: String) {
    val message = SimpleMailMessage()
    message.setFrom(senderEmail)
    message.setTo(receiver)
    message.setSubject("Тестовое письмо")
    message.setText("Текстовое сообщение в тестовом письме.\nВторая строка.")
    javaMailSender.send(message)
}

Тут мы создаём новый экземпляр сообщения SimpleMailMessage. Устанавливаем отправителя (из конфига) и получателя письма. Задаём тему письма через метод setSubject() и текст письма через setText(). Затем отправляем письмо. Как видите, ничего сложного. В результате получатель получит обычное текстовое письмо.

Но если мы хотим отформатировать текст (например, сделать жирным или курсивом), то следует использовать следующий метод:

fun sendHtmlEmail(receiver: String) {
    val message = javaMailSender.createMimeMessage()
    val helper = MimeMessageHelper(message)
    helper.setFrom(InternetAddress(senderEmail, senderText))
    helper.setTo(receiver)
    helper.setSubject("Тестовое письмо")
    helper.setText("<p>Сообщение в формате <b>Html</b>.<br>Вторая строка.</p>", true)
    javaMailSender.send(message)
}

Здесь мы создаём новое сообщение через createMimeMessage(). Затем для работы с ним используем обёртку MimeMessageHelper. В качестве отправителя устанавливаем объект InternetAddress, который содержит не только email отправителя, но и его текстовый алиас (произвольный текст для удобства). В остальном этот метод похож на предыдущий. Сам форматированный текст устанавливаем через метод setText() с флагом true, который указывает на то, что это html.

Как видите, второй метод позволяет форматировать текст сообщения, а потому рекомендуется использовать его для отправки email.


Облако тэгов

Kotlin, Java, Java 16, Java 11, Java 10, Java 9, Java 8, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.

Последние статьи


Комментарии

Добавить комментарий

×

devmark.ru