Статьи Генератор паролей UUID MD5 Unix-время URL-encode Base64 Форматирование XML Ваш внешний IP Число прописью


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

Вернуться назад Исходники

1 июля 2020

Тэги: Spring Boot Spring Kotlin gradle

Рассмотрим как отправлять email в Spring Boot. Вы также можете посмотреть исходники этого примера на github (ссылка прилагается). Для начала создадим новый gradle-проект (проще всего это сделать с помощью start.spring.io). В проекте должна быть такая зависимость (пример для 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.