[java] Javamail을 사용하여 이메일에 특정 시간에 보내기 설정하기

Javamail은 Java 프로그램에서 이메일을 보내고 받는 기능을 제공하는 라이브러리입니다. 이메일을 특정 시간에 보내기 위해서는 Javamail을 이용하여 작성된 코드에 추가적인 로직을 구현해야 합니다.

1. Javamail 의존성 추가하기

먼저, 프로젝트의 build 파일에 Javamail 라이브러리 의존성을 추가해야 합니다. Maven 프로젝트의 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

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

Gradle 프로젝트의 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다.

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

2. 이메일 보내기 코드 작성하기

이제 이메일을 보내는 Java 코드를 작성해야 합니다. Javamail을 사용하여 이메일을 보내는 예시 코드를 아래에 제공합니다.

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

public class EmailSender {
  
  public static void main(String[] args) {
    String host = "smtp.gmail.com";
    String port = "587";
    String username = "your_email@gmail.com";
    String password = "your_password";

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", port);

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

    try {
      MimeMessage message = new MimeMessage(session);
      message.setFrom(new InternetAddress(username));
      message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient_email@example.com"));
      message.setSubject("Scheduled Email Test");
      message.setText("This is a test email sent at a specific time.");

      // 특정 시간에 이메일 보내기 설정
      Date scheduledTime = new Date(System.currentTimeMillis() + 10000); // 10초 후에 이메일 발송
      Timer timer = new Timer();
      timer.schedule(new TimerTask() {
        @Override
        public void run() {
          try {
            Transport.send(message);
            System.out.println("Email sent successfully!");
          } catch (MessagingException e) {
            e.printStackTrace();
          }
        }
      }, scheduledTime);
    } catch (MessagingException e) {
      e.printStackTrace();
    }
  }
}

위의 코드는 Gmail SMTP 서버를 사용하는 예시이며, Gmail 계정 정보와 수신자 이메일 주소를 적절히 변경해야 합니다.

3. 이메일 보내기 설정하기

특정 시간에 이메일을 보내려면 TimerTimerTask 클래스를 사용하여 일정 시간이 지난 후에 이메일을 보내도록 스케줄링해야 합니다. 위의 예시 코드에서는 schedule 메서드를 사용하여 이메일 발송이 예약된 시간을 설정하고, TimerTask 클래스를 구현한 익명 클래스에서 실제 이메일을 보내는 로직을 작성합니다.

위의 예시 코드에서는 현재 시간부터 10초 후에 이메일을 보내도록 설정되어 있습니다. 필요한 경우 Date 클래스의 생성자에 원하는 시간을 지정하여 특정 시간에 이메일을 발송할 수 있습니다.


이제 Javamail을 사용하여 이메일을 특정 시간에 보내도록 설정하는 방법을 알아보았습니다. 다양한 응용을 통해 이메일 발송 기능을 자유롭게 활용해보세요.

Javamail 문서에서 더 자세한 정보를 찾아볼 수 있습니다.