산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 이메일 전송 완벽 가이드: JavaMail API 활용법

자바 애플리케이션에서 이메일을 전송하려면 JavaMail API와 JAF(Java Activation Framework)가 필요합니다. 이 가이드에서는 기본 텍스트 이메일부터 HTML 이메일, 첨부 파일 전송, 인증 설정까지 단계별로 설명합니다.

필수 라이브러리 설치

다운로드 후 압축을 해제하면 mail.jar와 activation.jar 파일이 있습니다. 이 두 파일을 프로젝트의 CLASSPATH에 추가해야 합니다.

기본 텍스트 이메일 전송

로컬호스트가 인터넷에 연결되어 있고 SMTP 서버 역할을 할 수 있다고 가정합니다.

예제 코드

// 파일명: SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {
    public static void main(String[] args) {
        // 수신자 이메일
        String to = "recipient@gmail.com";
        // 발신자 이메일
        String from = "sender@gmail.com";
        // SMTP 서버 (로컬호스트 사용 시)
        String host = "localhost";

        // 시스템 속성 가져오기
        Properties properties = System.getProperties();
        // 메일 서버 설정
        properties.setProperty("mail.smtp.host", host);

        // 세션 객체 생성
        Session session = Session.getDefaultInstance(properties);

        try {
            // MimeMessage 객체 생성
            MimeMessage message = new MimeMessage(session);
            
            // 발신자 설정
            message.setFrom(new InternetAddress(from));
            // 수신자 설정
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // 제목 설정
            message.setSubject("자바 이메일 테스트");
            // 본문 설정
            message.setText("자바에서 보내는 테스트 이메일입니다.");
            
            // 전송
            Transport.send(message);
            System.out.println("이메일 전송 성공!");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

실행 결과

$ java SendEmail
이메일 전송 성공!

다중 수신자 지정 방법

여러 수신자에게 전송하려면 addRecipients() 메서드를 사용합니다.

void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException

HTML 이메일 전송

HTML 형식의 이메일을 보내려면 setContent() 메서드의 두 번째 인자로 "text/html"을 지정합니다.

예제 코드

// 파일명: SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail {
    public static void main(String[] args) {
        String to = "recipient@gmail.com";
        String from = "sender@gmail.com";
        String host = "localhost";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        Session session = Session.getDefaultInstance(properties);

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("HTML 이메일 테스트");
            
            // HTML 콘텐츠 설정
            String htmlContent = "

환영합니다!

이것은 HTML 이메일입니다.

"; message.setContent(htmlContent, "text/html"); Transport.send(message); System.out.println("HTML 이메일 전송 성공!"); } catch (MessagingException mex) { mex.printStackTrace(); } } }

첨부 파일 포함 이메일 전송

MimeMultipart와 MimeBodyPart를 사용하여 텍스트와 파일을 함께 전송합니다.

예제 코드

// 파일명: SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.*;

public class SendFileEmail {
    public static void main(String[] args) {
        String to = "recipient@gmail.com";
        String from = "sender@gmail.com";
        String host = "localhost";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        Session session = Session.getDefaultInstance(properties);

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("첨부 파일 테스트");

            // 본문 파트 생성
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText("첨부 파일이 포함된 이메일입니다.");

            // 멀티파트 컨테이너 생성
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);

            // 첨부 파일 파트 생성
            messageBodyPart = new MimeBodyPart();
            String filename = "document.pdf";
            DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);
            multipart.addBodyPart(messageBodyPart);

            // 메시지에 멀티파트 설정
            message.setContent(multipart);
            Transport.send(message);
            System.out.println("첨부 파일 이메일 전송 성공!");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

SMTP 인증 설정

메일 서버가 인증을 요구하는 경우 사용자 ID와 비밀번호를 설정합니다.

props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.user", "your_username");
props.setProperty("mail.password", "your_password");

인증이 필요한 경우 Session.getInstance(properties, authenticator)를 사용하여 Authenticator 구현체를 전달해야 합니다.

실무 팁

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 주석: 종류, 사용법, 모범 사례
  3. Java 향상된 for 루프(for-each) 완벽 가이드: 문법, 예제, 비교
  4. Java String 마스터하기: 생성, 메서드, 모범 사례
  5. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  6. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  7. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  8. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  9. Java Assertion(어설션) 실전 가이드: 버그 조기 발견과 코드 신뢰성 확보
  10. Java Vector 완벽 가이드: 사용법, 특징, ArrayList와의 비교