간단하고 HTML 기반 이메일 전송을 위한 무료 Java API
첨부 파일, 삽입 이미지, SMTP, IMAP, POP3 프로토콜 지원 및 고급 보안 지원을 갖춘 텍스트 및 HTML 기반 이메일 메시지를 생성하고 전송하는 오픈 소스 Java 이메일 처리 API
JavaMail이란?
엔터프라이즈 애플리케이션과 자동화 시스템 세계에서 프로그래밍 방식으로 이메일을 보내고 받을 수 있는 능력은 단순한 편리함을 넘어 필수 요소입니다. 비밀번호 재설정 및 주문 확인 메일 전송부터 들어오는 지원 티켓 처리까지, 이메일 통합은 핵심 기능입니다. Java 개발자에게 이 기능의 초석은 견고한 오픈 소스 JavaMail API였습니다. 이 포괄적인 제품 페이지에서는 JavaMail API와 그 강력한 기능을 살펴보고, Java 애플리케이션에서 이메일 통합을 시작할 수 있도록 실용적인 코드 예제를 제공합니다.
JavaMail API는 Oracle(구 Sun Microsystems)에서 제공하는 성숙한 오픈 소스 프레임워크로, 메일 및 메시징 애플리케이션을 구축하기 위한 플랫폼 및 프로토콜에 독립적인 구조를 제공합니다. Java 생태계에서 이메일을 처리하기 위한 표준 API이며, SMTP, POP3, IMAP과 같은 기본 이메일 프로토콜의 복잡성을 추상화해 개발자가 깔끔한 객체 지향 인터페이스로 작업할 수 있게 합니다. 라이브러리에는 HTML 이메일 생성 및 전송, 첨부 파일 추가, 인라인 이미지 삽입, 멀티파트 콘텐츠, 강력한 인증 및 보안 지원, 폴더 기반 이메일 지원, 향상된 이메일 검색 및 필터링, SMTP를 통한 이메일 읽기 등 여러 중요한 기능이 포함되어 있습니다.
JavaMail 시작하기
우선 JDK 1.6 이상을 설치해야 합니다. pom.xml에 다음 Maven 의존성을 추가하십시오.
Maven Dependency
<dependency>
<groupId>com.sun.mail</groupId>s;
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
라이브러리를 GitHub 페이지에서 직접 다운로드할 수 있습니다.
Java 라이브러리를 통한 이메일 메시지 전송
오픈 소스 JavaMail 라이브러리는 Java 애플리케이션 내에서 간단한 텍스트 이메일과 HTML 이메일을 생성하고 전송하는 기능을 포함합니다. 개발자는 기존 이메일을 읽고, 파일 및 이미지를 첨부 파일로 추가하고, 여러 사용자에게 이메일을 보내며, 사용자 정의 헤더를 추가하는 등 다양한 작업을 수행할 수 있습니다. 호스트, 포트 및 인증·TLS 활성화 플래그와 같은 연결 매개변수를 정의해야 합니다. 다음 예제는 SMTP 서버(예: Gmail)를 사용해 기본 텍스트 이메일을 전송하는 방법을 보여줍니다.
SMTP 서버를 통한 기본 텍스트 이메일 전송 (Java API 사용)
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class SimpleEmailSender {
public static void main(String[] args) {
// Sender's and recipient's email ID
String from = "your.email@gmail.com";
String to = "recipient.email@example.com";
// SMTP server configuration (for Gmail)
String host = "smtp.gmail.com";
final String username = "your.email@gmail.com";
final String password = "your-app-password"; // Use an App Password for Gmail
// Setup mail server properties
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true"); // Use TLS
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
// Get the Session object and pass username and password
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object
Message message = new MimeMessage(session);
// Set From: header field
message.setFrom(new InternetAddress(from));
// Set To: header field
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Hello from JavaMail API");
// Set the actual message body
message.setText("This is a test email sent programmatically using the JavaMail API.");
// Send message
Transport.send(message);
System.out.println("Email sent successfully!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Java를 통한 이메일 검색 및 필터링
오픈 소스 JavaMail 라이브러리는 폴더 내 이메일을 발신자, 제목, 날짜, 플래그 등 다양한 기준으로 검색하는 전체 지원을 제공합니다. 이는 이메일 클라이언트나 자동화 작업을 개발할 때 특히 유용합니다. AndTerm, OrTerm, NotTerm을 사용해 여러 검색어를 결합할 수도 있습니다. 다음 예제는 특정 발신자에게서 온 메시지를 검색하는 방법을 보여줍니다.
Java 애플리케이션에서 특정 발신자 메시지 검색
Store store = session.getStore("imap");
store.connect("imap.example.com", username, password);
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
// Search for messages from a specific sender
SearchTerm senderTerm = new FromStringTerm("alerts@example.com");
Message[] found = inbox.search(senderTerm);
for (Message m : found) {
System.out.println("Subject: " + m.getSubject());
}
inbox.close(false);
store.close();
SMTP, IMAP, POP3 프로토콜 지원
오픈 소스 JavaMail은 기본적으로 가장 일반적인 세 가지 이메일 프로토콜을 지원합니다. SMTP(간단 메일 전송 프로토콜)는 메시지 전송에, POP3(우편 프로토콜 3)는 간단한 이메일 수신에, IMAP(인터넷 메시지 접근 프로토콜)은 폴더, 부분 가져오기 등 보다 고급 이메일 접근에 사용됩니다. 또한 SMTPS, POP3S, IMAPS와 같은 보안 변형도 지원하며, 맞춤형 제공자를 위해 확장할 수 있습니다.
Java를 통한 고급 인증 및 보안
오픈 소스 JavaMail은 이메일 서버와의 보안 통신을 지원합니다. 이는 오늘날 보안에 민감한 환경에서 매우 중요합니다. 라이브러리는 TLS(전송 계층 보안)를 지원하여 애플리케이션과 메일 서버 간 통신 채널을 암호화합니다. 또한 TLS의 전신인 SSL(보안 소켓 계층)도 지원해 안전한 연결을 설정할 수 있습니다. 표준 사용자명/비밀번호 인증도 지원하여 로그인 요구 서버에 연결할 수 있습니다.