Ошибка отправки в Java
Если порт или хост недоступны, Transport.send
бросает MessagingException. В учебном коде
ошибку ловят, печатают текст и продолжают работу -
например, закрывают тестовый сервер после блока
catch.
Намеренно указывают неверный порт, пока на правильном порту 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;
public class Main {
public static void main(String[] args) throws Exception {
GreenMail server = new GreenMail(ServerSetupTest.SMTP);
server.start();
server.setUser("reader@local.test", "reader", "pass");
Properties props = new Properties();
props.put("mail.smtp.host", "127.0.0.1");
props.put("mail.smtp.port", "9");
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.connectiontimeout", "2000");
props.put("mail.smtp.timeout", "2000");
Session session = Session.getInstance(props);
MimeMessage letter = new MimeMessage(session);
letter.setFrom(new InternetAddress("writer@local.test"));
letter.setRecipient(
Message.RecipientType.TO,
new InternetAddress("reader@local.test"),
);
letter.setSubject("Will fail");
letter.setText("No listener on port 9.");
try {
Transport.send(letter);
System.out.println("sent");
} catch (MessagingException ex) {
System.out.println(ex.getMessage());
}
server.stop();
}
}
Строка "sent" не появляется. Вместо неё в
консоли - описание ошибки соединения из исключения.
Программа доходит до server.stop без
необработанного падения.
Укажите порт 9999 при запущенном GreenMail
на другом порту. Перехватите MessagingException
и выведите getMessage исключения.
Повторите отправку с неверным портом, но после
ошибки выведите "done". Убедитесь, что
метка печатается и сервер останавливается штатно.