Письмо с разметкой в Java
Текстовое письмо и HTML различаются типом содержимого.
Вместо setText вызывают setContent:
первый аргумент - строка с разметкой, второй - MIME-тип
text/html с указанием кодировки.
Пример с жирным словом в теле и чтением HTML-строки обратно:
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("HTML memo");
letter.setContent(
"<p>Order is <b>confirmed</b>.</p>",
"text/html; charset=utf-8",
);
Transport.send(letter);
String html = (String) server.getReceivedMessages()[0]
.getContent();
System.out.println(html);
server.stop();
}
}
В выводе остаются теги <p> и <b> -
это сырое HTML-содержимое части письма, а не
отрендеренная страница.
Отправьте HTML с заголовком <h1>News</h1>
и абзацем "Weekly digest.". Выведите
полученную строку содержимого.
Сформируйте разметку со списком из двух пунктов
"A" и "B" через <ul>.
Проверьте по выводу, что оба пункта присутствуют
в теле.