Введение в почту в Kotlin
Электронное письмо связывает отправителя и адресата через сеть. У сообщения есть тема - краткая строка в списке входящих, и тело - основной текст или вложенные части. Передачу от клиента к серверу выполняет протокол SMTP: программа открывает соединение, передает заголовки и содержимое, сервер принимает письмо в ящик получателя.
В учебных примерах удобно поднимать SMTP на той же
машине. Библиотека GreenMail слушает 127.0.0.1,
принимает письма в память и позволяет прочитать их
сразу после отправки, не настраивая реальный почтовый
домен.
Схема запуска: создать сервер для тестового SMTP,
зарегистрировать ящик получателя, собрать
MimeMessage через Session Jakarta Mail
и вызвать Transport.send. Тему принятого
письма можно взять из массива, который возвращает
сервер:
import com.icegreen.greenmail.util.GreenMail
import com.icegreen.greenmail.util.ServerSetupTest
import jakarta.mail.Message
import jakarta.mail.Session
import jakarta.mail.Transport
import jakarta.mail.internet.InternetAddress
import jakarta.mail.internet.MimeMessage
import java.util.Properties
fun main() {
val server = GreenMail(ServerSetupTest.SMTP)
server.start()
server.setUser("reader@local.test", "reader", "pass")
val props = Properties()
props["mail.smtp.host"] = "127.0.0.1"
props["mail.smtp.port"] = server.smtp.port.toString()
props["mail.smtp.auth"] = "false"
val session = Session.getInstance(props)
val letter = MimeMessage(session)
letter.setFrom(InternetAddress("writer@local.test"))
letter.setRecipient(
Message.RecipientType.TO,
InternetAddress("reader@local.test"),
)
letter.subject = "Welcome note"
letter.setText("Short body for the intro lesson.")
Transport.send(letter)
val inbox = server.receivedMessages
println(inbox[0].subject)
server.stop()
}
В консоли появляется Welcome note - та же тема,
которую задали перед отправкой. Так проверяют, что
письмо дошло до тестового ящика без обращения к
интернет-провайдеру.