Введение в почту в Java
Складская или учетная программа иногда должна отправить уведомление менеджеру: тема попадает в список входящих, тело несет факты о заказе или остатках. Передачу от клиента к серверу выполняет протокол SMTP: программа открывает соединение, передает заголовки и содержимое, сервер принимает письмо в ящик получателя.
В учебных примерах удобно поднимать SMTP на той же
машине. GreenMail слушает 127.0.0.1,
принимает письма в память и позволяет прочитать их
сразу после отправки, не настраивая реальный почтовый
домен.
Схема запуска: создать сервер для тестового SMTP,
зарегистрировать ящик получателя, собрать
MimeMessage через Session и вызвать
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;
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",
String.valueOf(server.getSmtp().getPort()),
);
props.put("mail.smtp.auth", "false");
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("Welcome note");
letter.setText("Short body for the intro lesson.");
Transport.send(letter);
MimeMessage[] inbox = server.getReceivedMessages();
System.out.println(inbox[0].getSubject());
server.stop();
}
}
В консоли появляется Welcome note - та же тема,
которую задали перед отправкой. Так проверяют, что
письмо дошло до тестового ящика без обращения к
интернет-провайдеру.