ส่งอีเมลแบบ HTML ใช้ MimeMessage.setContent(content, "text/html") แทน setText()
ตัวอย่าง SendHtmlEmail.jsp
<%@ page import="java.io.*,java.util.*,javax.mail.*" %>
<%@ page import="javax.mail.internet.*,javax.activation.*" %>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
String to = "recipient@gmail.com";
String from = "sender@gmail.com";
String host = "localhost";
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(props);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("HTML Email Subject");
// HTML Content
String htmlContent = "<h1>Welcome!</h1>" +
"<p>This is <b>HTML</b> email.</p>" +
"<ul><li>Item 1</li><li>Item 2</li></ul>";
message.setContent(htmlContent, "text/html; charset=UTF-8");
Transport.send(message);
out.println("HTML Email sent successfully!");
} catch (MessagingException e) {
e.printStackTrace();
out.println("Error: " + e.getMessage());
}
%>
จุดสำคัญ
setContent(htmlString, "text/html")- บอก mail client ว่าเป็น HTML- ควรระบุ charset (UTF-8) เพื่อรองรับภาษาไทย
- สามารถใส่ HTML ใหญ่ๆ ได้ (CSS inline, images ผ่าน CID)
- ใช้ MimeMultipart ("related") สำหรับ embedded images
Embedded Images (Inline)
MimeMultipart multipart = new MimeMultipart("related");
// HTML part
BodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("
", "text/html");
multipart.addBodyPart(htmlPart);
// Image part
BodyPart imagePart = new MimeBodyPart();
imagePart.setDataHandler(new DataHandler(new FileDataSource("logo.png")));
imagePart.setHeader("Content-ID", "");
multipart.addBodyPart(imagePart);
message.setContent(multipart);
ข้อกำหนดเดียวกับ text email
- JavaMail API, JAF
- SMTP server
- Authentication config (ถ้าจำเป็น)