[java] Javamail을 사용하여 이메일 수신하기

이메일 클라이언트를 구현하거나 기존 애플리케이션에 이메일 수신 기능을 추가하고자 할 때 Javamail API는 매우 유용한 도구입니다. Javamail을 사용하여 이메일을 수신하는 방법에 대해 알아보겠습니다.

1. 의존성 설정하기

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

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

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

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

의존성을 추가한 후, 프로젝트를 빌드하여 Javamail API를 사용할 준비를 마칩니다.

2. 이메일 수신 설정하기

이메일을 수신하기 위해서는 이메일 서버의 정보와 사용자의 계정 정보가 필요합니다. 다음은 GMail을 사용하는 예제입니다. 다른 이메일 서버를 사용하는 경우 해당 서버의 호스트 및 포트를 사용해야 합니다.

String host = "imap.gmail.com";
String username = "example@gmail.com";
String password = "password";

Properties properties = new Properties();
properties.setProperty("mail.store.protocol", "imaps");
properties.setProperty("mail.imaps.host", host);
properties.setProperty("mail.imaps.port", "993");

Session session = Session.getInstance(properties);

Store store = session.getStore("imaps");
store.connect(host, username, password);

위 코드에서 host, username, password 변수를 이메일 서버에 맞게 설정해야 합니다.

3. 이메일 수신하기

이메일을 수신하기 위해서는 FolderMessage를 사용해야 합니다. 다음은 수신된 이메일을 읽는 방법에 대한 예제입니다.

Folder inboxFolder = store.getFolder("inbox");
inboxFolder.open(Folder.READ_ONLY);

Message[] messages = inboxFolder.getMessages();

for (Message message : messages) {
    System.out.println("From: " + message.getFrom()[0]);
    System.out.println("Subject: " + message.getSubject());
    System.out.println("Date: " + message.getSentDate());

    // 이메일 내용 읽기
    String contentType = message.getContentType();

    if (contentType.contains("text/plain") || contentType.contains("text/html")) {
        String content = message.getContent().toString();
        System.out.println("Content: " + content);
    } else if (contentType.contains("multipart")) {
        Multipart multiPart = (Multipart) message.getContent();
        int numberOfParts = multiPart.getCount();

        for (int partCount = 0; partCount < numberOfParts; partCount++) {
            BodyPart part = multiPart.getBodyPart(partCount);
            String content = part.getContent().toString();
            System.out.println("Content: " + content);
        }
    }
}

inboxFolder.close(false);
store.close();

위 코드는 받은 이메일의 발신자, 제목, 날짜 및 내용을 출력하는 간단한 예제입니다.

결과

위 코드를 실행하면 지정된 이메일 계정의 수신함에서 이메일을 가져와서 출력합니다.

결론

Javamail을 사용하여 이메일을 수신하는 방법에 대해 알아보았습니다. 응용 프로그램에서 이메일 클라이언트를 구현하거나 이메일 기능을 추가하기 위해 Javamail API를 사용할 수 있습니다. 자세한 내용은 Javamail 공식 문서를 참조하시기 바랍니다.