Статьи
YouTube-канал

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

Исходники

1 июля 2020

Тэги: gradle Kotlin Spring Spring Boot

Рассмотрим как отправлять email в Spring Boot. Вы также можете посмотреть исходники этого примера на github (ссылка прилагается). Для начала создадим новый 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, Hibernate, Collections, Stream API, многопоточность, ввод-вывод, Apache, maven, gradle, JUnit, YouTube, новости, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml

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


Комментарии

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

×

devmark.ru