[java] Javamail을 사용하여 이메일에 특정 시간에 예약되는 작업 추가하기

이메일 기능은 많은 애플리케이션에서 중요한 역할을 합니다. 이메일을 보내기 위해 Javamail API를 사용할 수 있으며, 이를 통해 특정 시간에 예약되는 작업을 이메일로 보낼 수 있습니다. 이번 기사에서는 Javamail을 사용하여 이메일에 예약 작업을 추가하는 방법을 소개하겠습니다.

Javamail 라이브러리 추가하기

먼저, 프로젝트의 의존성에 Javamail 라이브러리를 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다:

<dependencies>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
</dependencies>

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 의존성을 추가할 수 있습니다:

dependency {
    implementation 'javax.mail:mail:1.4.7'
}

이메일 작업 예약하기

이제 Javamail을 사용하여 이메일을 예약하는 작업을 만들어보겠습니다. 아래의 예제 코드는 특정 시간에 예약된 이메일 작업을 실행하는 방법을 보여줍니다.

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class EmailScheduler {

    public static void main(String[] args) {
        // 예약할 시간 설정 (현재 시간 기준으로 10분 후로 설정)
        Calendar scheduledTime = Calendar.getInstance();
        scheduledTime.add(Calendar.MINUTE, 10);

        // 예약 작업 생성
        TimerTask emailTask = new TimerTask() {
            @Override
            public void run() {
                try {
                    sendEmail();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        };

        // 작업 예약
        Timer timer = new Timer();
        timer.schedule(emailTask, scheduledTime.getTime());
    }

    private static void sendEmail() throws MessagingException {
        // 이메일 설정
        String to = "recipient@example.com";
        String from = "sender@example.com";
        String subject = "예약된 이메일 작업";
        String content = "안녕하세요, 예약된 이메일 작업입니다.";

        // SMTP 서버 설정
        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", "smtp.example.com");
        properties.setProperty("mail.smtp.port", "587");
        properties.setProperty("mail.smtp.auth", "true");
        properties.setProperty("mail.smtp.starttls.enable", "true");

        // 계정 정보 설정
        final String username = "your_username";
        final String password = "your_password";

        // 세션 생성
        Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        // 이메일 작성
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
        message.setSubject(subject);
        message.setContent(content, "text/html; charset=UTF-8");

        // 이메일 전송
        Transport.send(message);
    }
}

위의 예제 코드에서는 Timer 클래스를 사용하여 작업을 예약하고, TimerTask 클래스를 사용하여 예약 작업을 정의합니다. TimerTaskrun 메서드에서는 sendEmail 메서드를 호출하여 이메일을 보냅니다. sendEmail 메서드에서는 Javamail을 사용하여 이메일을 설정하고 전송합니다. 이메일 서버 설정과 계정 정보는 각자의 환경에 맞게 수정해야 합니다.

결론

Javamail API를 사용하여 이메일에 예약 작업을 추가하는 방법을 알아보았습니다. 위의 예제 코드를 참고하여 프로젝트에 적용해보세요. 이를 통해 애플리케이션에서 필요한 시간에 자동으로 이메일을 보낼 수 있습니다.