[java] Javamail을 사용하여 이메일에 다시 보내기 추가하기

이전에 작성한 이메일 발송 코드에 다시 보내기 기능을 추가하고 싶다면 Javamail을 사용하여 쉽게 구현할 수 있습니다. Javamail은 Java에서 이메일을 보내는 데 사용되는 라이브러리입니다.

Javamail 라이브러리 추가하기

먼저 프로젝트에 Javamail 라이브러리를 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'javax.mail:javax.mail-api:1.6.2'

의존성을 추가한 후에는 프로젝트를 다시 빌드해야 합니다.

다시 보내기 기능 추가하기

이제 이메일을 다시 보내기 위한 코드를 작성해보겠습니다. 다음은 보내는 이메일의 정보와 메서드를 받아서 이메일을 다시 보내는 코드입니다:

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class EmailUtils {
    private static final String SMTP_HOST = "SMTP_SERVER_HOSTNAME";
    private static final int SMTP_PORT = 587;
    private static final String SMTP_USERNAME = "YOUR_USERNAME";
    private static final String SMTP_PASSWORD = "YOUR_PASSWORD";

    public static void sendEmail(String recipient, String subject, String body) throws MessagingException {
        Session session = createSession();
        Message message = createMessage(session, recipient, subject, body);
        Transport.send(message);
    }

    public static void resendEmail(String recipient, String subject, String body) throws MessagingException {
        Session session = createSession();
        Message message = createMessage(session, recipient, subject, body);
        message.setFrom(new InternetAddress(SMTP_USERNAME));
        Transport.send(message);
    }

    private static Session createSession() {
        Properties props = new Properties();
        props.put("mail.smtp.host", SMTP_HOST);
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");

        Authenticator authenticator = new Authenticator() {
            private PasswordAuthentication authentication = new PasswordAuthentication(SMTP_USERNAME, SMTP_PASSWORD);

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return authentication;
            }
        };

        return Session.getInstance(props, authenticator);
    }

    private static Message createMessage(Session session, String recipient, String subject, String body) throws MessagingException {
        Message message = new MimeMessage(session);
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
        message.setSubject(subject);
        message.setText(body);
        return message;
    }
}

sendEmail 메서드는 이전에 작성한 이메일을 보내는 메서드입니다. resendEmail 메서드는 이전에 작성한 이메일을 받아서 발신인 주소를 설정한 후 다시 보내는 메서드입니다.

이메일 다시 보내기

이제 다시 보내기를 원하는 부분에서 resendEmail 메서드를 호출하여 이메일을 다시 보낼 수 있습니다. 예를 들어 다음과 같이 사용합니다:

try {
    String recipient = "recipient@example.com";
    String subject = "이메일 제목";
    String body = "이메일 내용";
    EmailUtils.resendEmail(recipient, subject, body);
    System.out.println("이메일 다시 보내기 성공");
} catch (MessagingException e) {
    System.out.println("이메일 다시 보내기 실패: " + e.getMessage());
}

이제 Javamail을 사용하여 이메일에 다시 보내기 기능을 쉽게 추가할 수 있습니다. Javamail 라이브러리를 프로젝트에 추가하고, resendEmail 메서드를 사용하여 이메일을 다시 보내면 됩니다.