다음은 자신의 컴퓨터에서 HTML 형식의 이메일을 전송하는 예제입니다. 이 예제는 localhost가 인터넷에 연결되어 있고 이메일을 전송할 수 있는 환경이라는 것을 전제로 합니다. 실행하기 전에 JavaMail API 패키지와 JAF(JavaBeans Activation Framework) 패키지에 포함된 모든 JAR 파일이 CLASSPATH에 올바르게 등록되어 있는지 반드시 확인하세요.
이 예제는 일반 텍스트 이메일을 전송하는 기본 예제와 구조가 거의 동일합니다. 가장 중요한 차이점은 setContent() 메서드를 사용한다는 점입니다. 이 메서드의 두 번째 인자로 "text/html"을 지정하면, 메시지 본문에 HTML 콘텐츠가 포함되어 있다는 의미가 됩니다.
이 방식을 활용하면 원하는 만큼 길고 복잡한 HTML 콘텐츠도 제한 없이 이메일로 전송할 수 있습니다.
예제 코드
<%@ page import = "java.io.*,java.util.*,javax.mail.*"%>
<%@ page import = "javax.mail.internet.*,javax.activation.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>
<%
String result;
// 수신자의 이메일 주소를 지정합니다.
String to = "abcd@gmail.com";
// 발신자의 이메일 주소를 지정합니다.
String from = "mcmohd@gmail.com";
// localhost에서 이메일을 전송한다고 가정합니다.
String host = "localhost";
// 시스템 속성 객체를 가져옵니다.
Properties properties = System.getProperties();
// 메일 서버(SMTP)를 설정합니다.
properties.setProperty("mail.smtp.host", host);
// 기본 Session 객체를 가져옵니다.
Session mailSession = Session.getDefaultInstance(properties);
try {
// 기본 MimeMessage 객체를 생성합니다.
MimeMessage message = new MimeMessage(mailSession);
// From 헤더 필드를 설정합니다.
message.setFrom(new InternetAddress(from));
// To 헤더 필드를 설정합니다.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Subject 헤더 필드를 설정합니다.
message.setSubject("This is the Subject Line!");
// HTML 본문을 원하는 크기만큼 자유롭게 작성하여 전송합니다.
message.setContent("<h1>This is actual message</h1>", "text/html" );
// 메시지를 전송합니다.
Transport.send(message);
result = "Sent message successfully....";
} catch (MessagingException mex) {
mex.printStackTrace();
result = "Error: unable to send message....";
}
%>
<html>
<head>
<title>Send HTML Email using JSP</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<p align = "center">
<%
out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>
핵심 포인트 정리
- setContent(message, "text/html"): 첫 번째 인자에는 HTML 문자열을, 두 번째 인자에는 MIME 타입인
text/html을 전달하여 브라우저처럼 서식이 적용된 이메일을 만들 수 있습니다. - MimeMessage: HTML과 같은 멀티미디어 콘텐츠를 담기 위해서는 일반 Message 대신 MimeMessage 객체를 사용해야 합니다.
- SMTP 설정:
mail.smtp.host속성에 메일 서버 주소를 지정합니다. 실무 환경에서는 localhost 대신 Gmail SMTP나 사내 메일 서버를 사용하는 경우가 많습니다. - 예외 처리: MessagingException을 catch하여 전송 실패 시 사용자에게 결과를 안내할 수 있습니다.
참고로 javax.mail 패키지는 현재 Eclipse 재단으로 이관되어 Jakarta Mail(jakarta.mail)로 명칭이 변경되었습니다. 최신 프로젝트에서는 import 문을 jakarta.mail.* 형태로 변경하고, Maven이나 Gradle에 Jakarta Mail 의존성을 추가하면 동일한 방식으로 사용할 수 있습니다.