[java] Javamail을 사용하여 이메일에 QR 코드 추가하기

이번 포스트에서는 Javamail 라이브러리를 사용하여 이메일에 QR 코드를 추가하는 방법에 대해 알아보겠습니다. QR 코드는 모바일 앱에서 읽을 수 있는 2차원 바코드로, 링크, 텍스트, 연락처 정보 등을 담을 수 있습니다.

1. QR 코드 생성하기

먼저, QR 코드를 생성하기 위해 Javamail 외부 라이브러리를 사용해야 합니다. 예를 들어, zxing 라이브러리는 QR 코드 생성 및 해석을 위한 강력한 도구입니다.

다음은 zxing 라이브러리를 사용하여 문자열로부터 QR 코드를 생성하는 Java 코드입니다:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.encoder.ByteMatrix;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class QRCodeGenerator {

    public static byte[] generateQRCode(String text, int width, int height) throws Exception {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        BufferedImage qrImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                qrImage.setRGB(x, y, bitMatrix.get(x, y) ? 0x000000 : 0xFFFFFF);
            }
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(qrImage, "png", baos);

        return baos.toByteArray();
    }
}

위의 코드는 generateQRCode 메서드를 통해 입력된 텍스트로 QR 코드를 생성하고, byte[] 형태로 반환합니다.

2. 이메일에 QR 코드 첨부하기

이제 이메일에 QR 코드를 첨부하기 위해 Javamail 라이브러리를 사용할 수 있습니다. Javamail은 Java 기반의 메일 송신 및 수신을 지원하는 라이브러리입니다.

다음은 Javamail을 사용하여 QR 코드를 이메일에 첨부하는 Java 코드입니다:

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

public class EmailWithQRCode {

    public static void main(String[] args) throws Exception {
        // 메일 서버 설정
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "your-smtp-host");
        properties.put("mail.smtp.port", "your-smtp-port");
        properties.put("mail.smtp.auth", "true");

        // 메일 계정 설정
        String username = "your-username";
        String password = "your-password";

        // QR 코드 생성
        String qrText = "http://www.example.com";
        int qrWidth = 200;
        int qrHeight = 200;
        byte[] qrCodeBytes = QRCodeGenerator.generateQRCode(qrText, qrWidth, qrHeight);

        // 메일 세션 생성
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        // 메일 작성
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("sender@example.com"));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com"));
        message.setSubject("QR Code Email");
        
        // QR 코드 첨부
        BodyPart qrCodePart = new MimeBodyPart();
        qrCodePart.setDataHandler(new DataHandler(new ByteArrayDataSource(qrCodeBytes, "image/png")));
        qrCodePart.setHeader("Content-ID", "<qr_code_image>");
        
        // 메일 콘텐츠 설정
        MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(qrCodePart);    
        message.setContent(multipart);
        
        // 메일 전송
        Transport.send(message);

        System.out.println("QR 코드를 첨부한 이메일이 성공적으로 전송되었습니다.");
    }
}

위의 예제 코드에서는 your-smtp-host, your-smtp-port, your-username, your-password를 실제 값으로 대체해야 합니다. 또한 http://www.example.com는 QR 코드에 포함될 링크가 됩니다.

이제 위의 코드를 실행하면 QR 코드가 첨부된 이메일이 보내지게 됩니다.

결론

Javamail과 zxing 라이브러리를 사용하여 이메일에 QR 코드를 추가하는 방법을 알아보았습니다. QR 코드를 이용하면 모바일 앱 등에서 쉽게 정보를 공유할 수 있습니다. QR 코드는 인코딩된 데이터를 나타내기 때문에 다양한 용도로 활용할 수 있으며, 이메일에 첨부하여 더욱 쉽게 공유할 수 있습니다.