[java] Javamail을 사용하여 이메일에 첨부 파일 크기 제한하기

이메일에 첨부 파일을 보낼 때, 파일 크기가 제한되어야 할 때가 있습니다. Javamail은 이러한 제한을 구현하는 데 도움이 되는 도구입니다. 이 문서에서는 Javamail을 사용하여 이메일에 첨부 파일의 크기를 제한하는 방법을 알아보겠습니다.

Javamail 라이브러리 가져오기

첨부 파일 크기 제한을 구현하기 위해 Javamail 라이브러리를 사용해야 합니다. Javamail 라이브러리는 Maven 등의 의존성 관리 도구를 사용해 프로젝트에 추가할 수 있습니다.

Maven 사용자의 경우, pom.xml 파일에 다음 의존성을 추가할 수 있습니다:

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

Gradle 사용자의 경우, build.gradle 파일에 다음 의존성을 추가할 수 있습니다:

implementation 'javax.mail:mailapi:1.4.7'

파일 크기 제한 설정하기

이메일에서 전송할 파일의 크기를 제한하기 위해서는 전송하기 전에 첨부 파일의 크기를 확인하고 제한된 크기보다 작은지 확인해야 합니다. Javamail에서는 MimeMessage 클래스를 사용하여 이메일을 만들고 첨부 파일 크기를 제한할 수 있습니다.

다음은 Javamail을 사용하여 파일 크기를 제한하는 예제 코드입니다:

import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;

public class EmailAttachmentExample {
    // 첨부 파일 크기 제한 (5MB)
    private static final int ATTACHMENT_SIZE_LIMIT = 5 * 1024 * 1024;

    public static void main(String[] args) throws MessagingException {
        // SMTP 서버 설정
        String host = "smtp.example.com";
        String port = "587";
        String username = "your_username";
        String password = "your_password";

        // SMTP 서버로 연결
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", port);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");

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

        // 이메일 만들기
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("from@example.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@example.com"));
        message.setSubject("첨부 파일 테스트");

        // 첨부 파일 추가
        File attachment = new File("path_to_attachment");
        if (attachment.length() <= ATTACHMENT_SIZE_LIMIT) {
            String contentType = new FileDataSource(attachment).getContentType();
            message.setDataHandler(new DataHandler(new FileDataSource(attachment)));
            message.setFileName(attachment.getName());
        } else {
            System.out.println("첨부 파일이 크기 제한을 초과했습니다.");
        }

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

위의 예제 코드에서는 ATTACHMENT_SIZE_LIMIT 변수를 사용하여 첨부 파일 크기를 제한합니다. File 객체를 사용하여 첨부 파일의 크기를 가져온 후, 제한된 크기와 비교합니다. 제한 크기보다 작은 경우에만 첨부 파일을 추가하고, 그렇지 않은 경우에는 에러 메시지를 출력합니다.

결론

이메일에 첨부 파일 크기를 제한하기 위해 Javamail을 사용하는 방법을 알아보았습니다. Javamail을 통해 첨부 파일 크기를 제한하여 안정적으로 파일을 전송할 수 있습니다. 이를 통해 용량이 큰 파일을 전송해야 하는 상황에서도 문제없이 이메일을 보낼 수 있습니다.

참고 자료