В этой статье я бы хотел рассказать, как настроить отправку почты со своей личной почты, используя яндекс и 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) } }
Вот и все. Такими нехитрыми действиями мы создали класс, который может отправлять почту пользователям от нашего имени. Это бесплатно, просто и эффективно. Можем успешно решать такие задачи, как оповещения по почте, или подтверждение почты пользователей.
Спасибо что дочитали. Надеюсь было полезно.
ссылка на оригинал статьи https://habr.com/ru/articles/835222/
Добавить комментарий