[java] Javamail을 사용하여 이메일에 임의의 알림 추가하기

이메일은 우리가 일상 생활에서 광범위하게 사용되는 커뮤니케이션 도구입니다. 자바에서는 Javamail API를 사용하여 이메일을 보내고 받는 기능을 쉽게 구현할 수 있습니다. 이번 포스트에서는 Javamail을 사용하여 이메일에 임의의 알림을 추가하는 방법에 대해 알아보겠습니다.

1. Javamail 설정하기

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

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

2. 이메일 보내기 (SMTP)

임의의 알림을 이메일로 전송하기 위해서는 먼저 SMTP 서버에 접속해야 합니다. 다음은 Gmail SMTP 서버를 사용하는 예제입니다:

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

public class EmailSender {
    public static void main(String[] args) throws MessagingException {
        // SMTP 서버 설정
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");

        // 계정 정보 설정
        final String username = "your-email@gmail.com";
        final String password = "your-password";

        // 세션 생성
        Session session = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        
        // 이메일 작성
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("your-email@gmail.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@gmail.com"));
        message.setSubject("알림 제목");
        message.setText("알림 내용");

        // 이메일 보내기
        Transport.send(message);

        System.out.println("이메일이 성공적으로 전송되었습니다.");
    }
}

위 예제에서는 Gmail SMTP 서버를 사용하도록 설정하였습니다. SMTP 서버 설정과 계정 정보는 각각의 이메일 서비스 제공자에 따라 달라질 수 있으므로, 필요에 따라 변경해야 합니다. 또한, usernamepassword는 보안상의 이유로 하드코딩되어선 안 되며, 환경변수나 별도의 보안 저장소에서 가져와 사용하는 것이 좋습니다.

3. 이메일에 임의의 알림 추가하기

이제 이메일을 보내는 기능을 구현했으므로, 알림을 이메일에 추가해볼 차례입니다.

다음은 위 예제에서 이메일 내용을 다른 형식으로 작성하는 부분을 수정한 예제입니다:

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

public class EmailSender {
    public static void main(String[] args) throws MessagingException {
        // SMTP 서버 설정은 이전과 동일하게 진행합니다.

        // 이메일 작성
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("your-email@gmail.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@gmail.com"));
        message.setSubject("알림 제목");

        // 알림 추가
        Multipart multipart = new MimeMultipart();
        BodyPart notificationPart = new MimeBodyPart();
        notificationPart.setText("알림입니다.");

        BodyPart filePart = new MimeBodyPart();
        String fileName = "file.txt";
        String filePath = "/path/to/file.txt";
        DataSource source = new FileDataSource(filePath);
        filePart.setDataHandler(new DataHandler(source));
        filePart.setFileName(fileName);

        multipart.addBodyPart(notificationPart);
        multipart.addBodyPart(filePart);

        message.setContent(multipart);

        // 이메일 보내기는 이전과 동일하게 진행합니다.
    }
}

위 예제에서는 MimeMultipart를 사용하여 이메일에 복수 개의 BodyPart를 추가하는 방법을 보여줍니다. 알림 내용을 입력하는 BodyPart와 파일을 첨부하는 BodyPart가 포함되어 있습니다. 첨부 파일의 경로 (filePath)와 이름 (fileName)은 실제 필요에 따라 변경해주어야 합니다.

이제 임의의 알림을 이메일에 추가하는 방법에 대해 알아보았습니다. Javamail을 사용하여 복잡한 이메일 기능을 구현할 수 있으며, 이것을 통해 알림 메시지 등 다양한 기능을 제공할 수 있습니다.

참고자료