- PVSM.RU - https://www.pvsm.ru -

Настройка почтового сервера Yandex spring boot

В этой статье я бы хотел рассказать, как настроить отправку почты со своей личной почты, используя яндекс и Spring boot. Видел много статей по настройке smtp сервера на Spring boot, но без связки с яндексом. А это ключевой момент, так как найти бесплатные smtp сервера не так то просто.

Для начала, нам понадобится почта яндекс. После смотрим, какие конфиги нам нужны тут [1]. Яндекс предлагает создать пароль для нашего приложения. Что мы и делаем по ссылке [2]. При создании пароля, копируем его себе, так как виден он только первый раз.

По сути, с яндексом мы закончили.

Переходим в наш проект. Я предполагаю что у вас уже настроен Spring boot. Так что нужно добавить зависимость для почты. Я использую Gradle, так что у меня это выглядит так:

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

Помимо этого, нужно будет добавить конфиги в файл application.properties.

#email
spring.mail.host=smtp.yandex.ru
spring.mail.port=465
spring.mail.protocol=smtps
spring.mail.username=яндекс_логин
spring.mail.password=яндекс_пароль
mail.debug=false - #опционально, можно выключать если не нужно

Далее нам нужно вручную создать имплементацию класса JavaMailSender. В нем мы укажем все конфиги для нашей почты.

import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.mail.javamail.JavaMailSenderImpl
@Configuration
class MailConfig {
@Value("${spring.mail.host}")
private val host: String? = null
@Value("${spring.mail.username}")
private val username: String? = null

@Value("${spring.mail.password}")
private val password: String? = null

@Value("${spring.mail.port}")
private val port: Int = 0

@Value("${spring.mail.protocol}")
private val protocol: String? = null

@Value("${mail.debug}")
private val debug: String? = null

@Bean
fun getMailSender(): JavaMailSender {
    val mailSender = JavaMailSenderImpl()
    mailSender.host = host
    mailSender.port = port
    mailSender.username = username
    mailSender.password = password
    val properties = mailSender.javaMailProperties
    properties.setProperty("mail.transport.protocol", protocol)
    properties.setProperty("mail.debug", debug)
    return mailSender
}

}

С помощью аннотации @Value [3] мы поттягиваем данные из конфигов. И в Котлине это выглядит немного по уродски, но выхода нет. Либо забивать конфиги вручную, а мы можем захотеть изменить их в зависимости от среды.

И класс, задача которого будет — отправлять письма. Назовем его MailSender.

import org.springframework.beans.factory.annotation.Value
import org.springframework.mail.SimpleMailMessage
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.stereotype.Service
@Service
class MailSender(
private  val mailSender: JavaMailSender
) {
@Value("${spring.mail.username}")
private val username: String? = null

fun send(emailTo: String, subject: String, message: String) {
    val mailMessage = SimpleMailMessage()
    mailMessage.from = username
    mailMessage.setTo(emailTo)
    mailMessage.subject = subject
    mailMessage.text = message
    mailSender.send(mailMessage)
}

}

Вот и все. Такими нехитрыми действиями мы создали класс, который может отправлять почту пользователям от нашего имени. Это бесплатно, просто и эффективно. Можем успешно решать такие задачи, как оповещения по почте, или подтверждение почты пользователей.

Спасибо что дочитали. Надеюсь было полезно.

Автор: andreworkfor

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/kotlin/393227

Ссылки в тексте:

[1] тут: https://yandex.ru/support/mail/mail-clients/others.html

[2] ссылке: https://id.yandex.ru/security/app-passwords

[3] @Value: https://www.pvsm.ru/users/Value

[4] Источник: https://habr.com/ru/articles/835222/?utm_source=habrahabr&utm_medium=rss&utm_campaign=835222