Ошибка отправки в Kotlin
Если порт или хост недоступны, Transport.send
бросает MessagingException. В учебном коде
ошибку ловят, печатают текст и продолжают работу -
например, закрывают тестовый сервер в блоке
finally.
Намеренно указывают неверный порт, пока на правильном порту GreenMail не слушает:
import com.icegreen.greenmail.util.GreenMail
import com.icegreen.greenmail.util.ServerSetupTest
import jakarta.mail.Message
import jakarta.mail.MessagingException
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"] = "9"
props["mail.smtp.auth"] = "false"
props["mail.smtp.connectiontimeout"] = "2000"
props["mail.smtp.timeout"] = "2000"
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 = "Will fail"
letter.setText("No listener on port 9.")
try {
Transport.send(letter)
println("sent")
} catch (ex: MessagingException) {
println(ex.message)
}
server.stop()
}
Строка "sent" не появляется. Вместо неё в
консоли - описание ошибки соединения из исключения.
Программа доходит до server.stop без
необработанного падения.
Укажите порт 9999 при запущенном GreenMail
на другом порту. Перехватите MessagingException
и выведите message исключения.
Повторите отправку с неверным портом, но после
ошибки выведите "done". Убедитесь, что
метка печатается и сервер останавливается штатно.