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

в 17:25, , рубрики: email, kotlin, spring boot

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

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

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

Переходим в наш проект. Я предполагаю что у вас уже настроен 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 мы поттягиваем данные из конфигов. И в Котлине это выглядит немного по уродски, но выхода нет. Либо забивать конфиги вручную, а мы можем захотеть изменить их в зависимости от среды.

И класс, задача которого будет — отправлять письма. Назовем его 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js