В этой статье я бы хотел рассказать, как настроить отправку почты со своей личной почты, используя яндекс и 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)
}
}
Вот и все. Такими нехитрыми действиями мы создали класс, который может отправлять почту пользователям от нашего имени. Это бесплатно, просто и эффективно. Можем успешно решать такие задачи, как оповещения по почте, или подтверждение почты пользователей.
Спасибо что дочитали. Надеюсь было полезно.
Комментарии (6)
Folko85
10.08.2024 17:35Вроде бы встречал такую инструкцию много раз в сети. Как насчёт того, чтобы настроить не только отправку, но и приём писем для автоматической обработки в приложении? Это более редкий случай, но зато хоть что-то новое было бы.
LeshaRB
10.08.2024 17:35+1Видел много статей по настройке smtp сервера на Spring boot, но без связки с яндексом
А в чем существенная разница то? Например между тем же Gmail?
ma1uta
10.08.2024 17:35Про
@ConfigurationProperties
уже написали, более того, весь классMailConfig
можно удалять, так как он не нужен, в автоконфигурации https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java объявляется бинJavaMailSender
.
WhiteApfel
10.08.2024 17:35Нуууу, назвать это почтовым сервером... Когда это почтовый клиент, причём только smtp...
sarkhan69
10.08.2024 17:35При использовании spring boot starter mail, автоматически создаётся bean, javaMailSender, его можно напрямую заинжектить и не проставлять параметры соединения, так же не нужен отдельный проперти класс, если не требуется какое-то специфическое использование, выглядит как пустая статья, ради упоминания, код можно было уместить в один класс
turbo_nyasha
Чтобы это не выглядело по-уродски и было в лучших стилях private final сделайте
@ConfigurationProperties.
А вообще, есть сомнения насколько эту стать можно считать уникальной в плане контента.