본문 바로가기
스프링 부트3

스프링 부트 3에서 메일 발송 구현

by 굿센스굿 2024. 12. 6.
반응형

 

스프링 부트 3에서 메일 발송 기능은 다양한 애플리케이션에서 중요합니다. 사용자 인증 메일, 비밀번호 재설정 메일, 뉴스레터 발송 등 다양한 비즈니스 요구사항을 충족할 수 있습니다. 이번 블로그에서는 스프링 부트 3을 활용해 메일 발송 기능을 구현하는 방법을 단계별로 설명하며, 주요 예시와 함께 성공적인 구현을 위한 팁도 제공합니다.


1. 메일 발송 기능의 기본 개념

스프링 부트는 JavaMailSender 인터페이스를 제공해 SMTP(Simple Mail Transfer Protocol)를 이용한 메일 발송을 지원합니다. SMTP 서버는 Gmail, Naver, AWS SES 등 여러 서비스와 연동 가능합니다.

메일 발송을 구현하기 위해 다음 주요 단계를 거칩니다:

  1. SMTP 서버 설정.
  2. JavaMailSender를 통한 메일 발송 코드 작성.
  3. HTML 템플릿을 이용한 고급 메일 작성.

2. 스프링 부트 메일 발송 구현 단계

2.1 의존성 추가

스프링 부트 3 프로젝트에서는 spring-boot-starter-mail 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.2 애플리케이션 프로퍼티 설정

application.yml 또는 application.properties 파일에 SMTP 서버 정보를 입력합니다. Gmail을 예로 들면:

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: your-email@gmail.com
    password: your-email-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

Tip: Gmail을 사용할 경우, Google 계정의 '보안 수준이 낮은 앱 허용' 또는 앱 비밀번호를 생성해 사용해야 합니다.

2.3 JavaMailSender 설정

JavaMailSender를 빈으로 등록하고 메일 발송 로직을 구현합니다.

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

@Service
public class MailService {

    private final JavaMailSender mailSender;

    public MailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendSimpleMail(String to, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true); // HTML 지원

            mailSender.send(message);
            System.out.println("메일 발송 성공!");
        } catch (MessagingException e) {
            System.err.println("메일 발송 실패: " + e.getMessage());
        }
    }
}

3. 메일 발송 예시

예시 1: 단순 텍스트 메일 발송

MailService mailService = new MailService(mailSender);
mailService.sendSimpleMail("user@example.com", "안녕하세요", "이것은 테스트 메일입니다.");

결과: "안녕하세요"라는 제목과 "이것은 테스트 메일입니다."라는 내용이 포함된 텍스트 메일이 전송됩니다.

예시 2: HTML 포맷 메일 발송

String htmlContent = "<h1>안녕하세요!</h1><p>이것은 <b>HTML</b> 메일입니다.</p>";
mailService.sendSimpleMail("user@example.com", "HTML 메일 예시", htmlContent);

결과: 메일 본문이 HTML 형식으로 작성되며, 굵은 텍스트나 제목 스타일링이 적용됩니다.

예시 3: 첨부 파일이 있는 메일 발송

첨부 파일을 포함하려면 MimeMessageHelper에 추가 옵션을 설정합니다.

import java.io.File;

public void sendMailWithAttachment(String to, String subject, String content, File file) {
    MimeMessage message = mailSender.createMimeMessage();

    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);
        helper.addAttachment(file.getName(), file);

        mailSender.send(message);
        System.out.println("첨부 파일 메일 발송 성공!");
    } catch (MessagingException e) {
        System.err.println("첨부 파일 메일 발송 실패: " + e.getMessage());
    }
}

사용 예시:

File attachment = new File("path/to/file.pdf");
mailService.sendMailWithAttachment("user@example.com", "첨부 파일 메일", "PDF 파일을 확인해주세요.", attachment);

4. 구현 시 고려 사항

  1. SMTP 서버 제한: 무료 SMTP 서버(Gmail, Naver)는 발송량 제한이 있습니다. 대량 발송이 필요하다면 Amazon SES, SendGrid와 같은 상용 서비스를 고려하세요.
  2. 보안: 메일 발송 시 민감한 정보(예: 비밀번호)가 외부에 노출되지 않도록 환경 변수나 비밀 관리 서비스를 활용하세요.
  3. 템플릿 엔진: 이메일 디자인에 Thymeleaf 또는 Freemarker를 사용하면 더 정교한 메일 본문을 작성할 수 있습니다.

5. 결론

스프링 부트 3에서 메일 발송 기능은 간단하면서도 강력한 도구입니다. 위의 예시와 팁을 참고하면 기본 메일 발송부터 첨부 파일, HTML 템플릿까지 다양한 요구사항을 충족할 수 있습니다.
메일 발송은 단순 기능 이상으로 사용자 경험을 향상하고 비즈니스 가치를 극대화할 수 있는 중요한 요소입니다.

지금 바로 스프링 부트 3을 활용해 효과적인 메일 발송 기능을 구현해보세요! 🚀

반응형