[java] Quartz Scheduler로 주기적인 이메일 전송하기

주기적인 이메일 전송은 자동화된 작업을 수행하는데 매우 유용합니다. Quartz Scheduler는 Java 기반의 오픈 소스 라이브러리로, 스케줄링 작업을 관리하고 실행할 수 있습니다. 이번 글에서는 Quartz Scheduler를 사용하여 주기적인 이메일을 전송하는 방법을 살펴보겠습니다.

Quartz Scheduler 설치

먼저 Quartz Scheduler를 사용하기 위해 라이브러리를 프로젝트에 추가해야 합니다. 다음과 같이 Maven을 사용하는 경우, pom.xml 파일에 아래의 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.2</version>
    </dependency>
</dependencies>

Maven을 사용하지 않는 경우, Quartz Scheduler 공식 웹사이트에서 다운로드할 수 있습니다.

이메일 전송 작업 정의

이메일을 전송하기 위해 먼저 EmailService 클래스를 작성해야 합니다. JavaMail API를 사용하여 이메일을 전송할 수 있는 간단한 예제를 살펴보겠습니다.

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class EmailService {

    private final String username = "your-email@example.com";
    private final String password = "your-password";

    public void sendEmail(String to, String subject, String body) throws MessagingException {
        Properties properties = new Properties();
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.host", "smtp.example.com");
        properties.put("mail.smtp.port", "587");

        Session session = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject(subject);
        message.setText(body);

        Transport.send(message);
    }
}

위의 코드에서 usernamepassword를 자신의 이메일 주소와 비밀번호로 변경해주세요. 그리고 mail.smtp.host를 사용하는 이메일 서비스에 맞게 설정해주세요.

Quartz Scheduler를 사용하여 작업 예약

Quartz Scheduler를 사용하여 이메일 전송 작업을 주기적으로 예약할 수 있습니다. 예를 들어, 매일 오전 9시에 이메일을 전송하는 작업을 예약하려면 다음과 같이 코드를 작성할 수 있습니다.

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class EmailScheduler {

    public static void main(String[] args) throws SchedulerException {

        JobDetail job = JobBuilder.newJob(EmailJob.class).build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("emailTrigger", "group1")
                .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(9, 0))
                .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }
}

이 예제에서 EmailJob 클래스는 EmailService를 사용하여 이메일 전송 작업을 실행하는 execute() 메서드를 가지고 있습니다.

실행 결과 확인

Quartz Scheduler가 작업을 실행하면서 이메일 전송이 정상적으로 수행되는지 확인해보세요. 필요에 따라 작업 실행 로그를 확인하고 수정할 수 있습니다.

주기적인 이메일 전송을 위해 Quartz Scheduler를 사용하는 방법에 대해 알아보았습니다. 이제 자동으로 정해진 시간에 이메일을 보낼 수 있으며, 작업 예약 및 관리도 쉽게 할 수 있습니다. 코드를 개선하거나 추가로 기능을 추가할 수도 있습니다. 자세한 내용은 Quartz Scheduler 공식 문서를 참조하세요.