[java] Javamail을 사용하여 이메일에 암호화 적용하기

Javamail은 Java로 이메일을 전송, 수신 및 관리하기 위한 API입니다. 암호화는 이메일을 안전하게 전송하기 위해 중요한 요소입니다. Javamail을 사용하여 이메일에 암호화를 적용하는 방법을 배워봅시다.

전제 조건

1. SSL/TLS 암호화 사용하기

SSL (Secure Socket Layer) 및 TLS (Transport Layer Security)은 네트워크 통신을 보안하기 위해 사용되는 프로토콜입니다. Javamail을 사용하여 이메일을 보낼 때, SSL/TLS 암호화를 사용하려면 다음 단계를 따라야 합니다.

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

public class EmailEncryptionExample {

    public static void main(String[] args) {
        // SMTP 서버 호스트 및 포트 설정
        String host = "smtp.example.com";
        int port = 587;
        
        // 발신자 이메일 주소 및 비밀번호 설정
        String senderEmail = "sender@example.com";
        String senderPassword = "password";
        
        // 수신자 이메일 주소 설정
        String recipientEmail = "recipient@example.com";
        
        // SSL/TLS 암호화를 사용하는 경우 아래의 설정을 추가합니다.
        Properties properties = new Properties();
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.ssl.trust", host);
        
        // 세션 생성
        Session session = Session.getDefaultInstance(properties, 
            new javax.mail.Authenticator(){
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(senderEmail, senderPassword);
                }
        });
        
        try {
            // 메시지 생성
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(senderEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));
            message.setSubject("암호화된 이메일 보내기");
            message.setText("암호화된 이메일 내용입니다.");
            
            // 메시지 전송
            Transport.send(message);
            
            System.out.println("이메일이 성공적으로 보내졌습니다.");
        } catch (MessagingException e) {
            System.out.println("이메일 전송 중 오류가 발생했습니다: " + e.getMessage());
        }
    }
}

위 코드에서 host, senderEmail, senderPassword, recipientEmail 값을 실제 값으로 대체해야 합니다. 또한, 필요한 경우 port 값을 변경할 수 있습니다.

2. PGP 암호화 사용하기

PGP (Pretty Good Privacy) 암호화는 사용자 간에 안전하게 메시지를 교환하기 위해 사용되는 암호화 프로토콜입니다. Javamail을 사용하여 PGP 암호화를 적용하려면 다음 단계를 따라야 합니다.

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

public class EmailEncryptionExample {

    public static void main(String[] args) {
        // SMTP 서버 호스트 및 포트 설정
        String host = "smtp.example.com";
        int port = 587;
        
        // 발신자 이메일 주소 및 비밀번호 설정
        String senderEmail = "sender@example.com";
        String senderPassword = "password";
        
        // 수신자 이메일 주소 설정
        String recipientEmail = "recipient@example.com";
        
        // PGP 암호화를 사용하는 경우 아래의 설정을 추가합니다.
        Properties properties = new Properties();
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.ssl.trust", host);
        properties.put("mail.mime.crypt.x-pgp-encrypt", "true");
        
        // 세션 생성
        Session session = Session.getDefaultInstance(properties, 
            new javax.mail.Authenticator(){
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(senderEmail, senderPassword);
                }
        });
        
        try {
            // 메시지 생성
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(senderEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));
            message.setSubject("PGP 암호화된 이메일 보내기");
            message.setText("PGP 암호화된 이메일 내용입니다.");
            
            // 메시지 전송
            Transport.send(message);
            
            System.out.println("이메일이 성공적으로 보내졌습니다.");
        } catch (MessagingException e) {
            System.out.println("이메일 전송 중 오류가 발생했습니다: " + e.getMessage());
        }
    }
}

PGP 암호화를 사용하려면 properties.put("mail.mime.crypt.x-pgp-encrypt", "true"); 줄을 추가해야 합니다.

결론

Javamail을 사용하여 이메일에 암호화를 적용하는 방법을 살펴보았습니다. SSL/TLS 또는 PGP 암호화를 사용하여 메시지를 안전하게 보낼 수 있습니다.

참고 자료