Programming/Java

[Spring] Gmail SMTP를 이용하여 이메일 인증 구현 - 이메일 발송 프로그램(1)

mar1po5a 2025. 3. 21. 16:43
@Service
@Log4j
@Data
public class EmailService {
    
    @Autowired
    private MemberService service;
    
    @Autowired
    private JavaMailSender mailSender;

해당 클래스에는 인증코드를 생성하고, 이메일을 발송하고,

발송한 인증코드를 DB에 저장해 검증해주는 등 프로그램의 핵심 메서드들이 포함되어있다.

  • @Service : Spring에게 해당 클래스가 Service 클래스임을 알려주는 어노테이션
  • @Log4j : log.info(), log.error() 등 로그를 출력해주는 어노테이션
  • @Data : setter(), getter(), toString()을 자동으로 생성해주는 Lombok 라이브러리의 어노테이션
  • JavaMailSender : Spring에서 제공하는 이메일 전송 인터페이스
public String authCode(int length) {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            sb.append(random.nextInt(10)); // 0~9 사이의 랜덤 숫자 추가
        }
        return sb.toString();
    }

랜덤한 인증코드를 생성해주는 메서드이다. authCode(문자열 길이)로 사용한다.

  • Random : 랜덤 값을 생성해주는 클래스
  • append() : 문자열 추가
  • StringBuilder : 문자열의 추가, 수정, 삭제를 용이하게 만드는 클래스 (비슷한 클래스로는 String, StringBuffer가 있다.)
public void sendEmail(String to, String subject, String text) { // to : 수신인

	// 필수 정보 검증
	if (to == null || subject == null || text == null) {
		log.error("필수 정보가 누락되었습니다. 다시 확인해주세요.");
		return;
	}

	MimeMessage message = mailSender.createMimeMessage();

	try {
		MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
		helper.setTo(to);
		helper.setSubject(subject);
		helper.setText(text, true);

		mailSender.send(message);

		log.info("============================");
		log.info("=======인증코드 발송 완료========");
		log.info("============================");

	} catch (Exception e) {
		e.printStackTrace(); // 개발 이후 주석 처리
		log.error("============================");
		log.error("=====!!!인증코드 발송 실패!!!=====");
		log.error("============================");
	}

}

기본적인 이메일 전송을 담당하는 메서드이다.

  • MimeMessage : Java Mail API에서 제공하며 다양한 MIME 타입을 지원하는 클래스
  • createMimeMessage() : MimeMessage 객체 생성
  • MimeMessageHelper(message, true, "UTF-8") : Spring에서 제공하며, 원본 MimeMessage 객체를 수정하는 클래스. 앞서 생성한 MimeMessage 객체, 멀티파트 메시지(첨부 파일 + HTML + 텍스트 동시 지원) 지원 여부, 문자 인코딩 방식을 파라미터로 전달
  • setText() : 파라미터를 true로 전달해주면 이메일 본문 내용에 HTML 태그를 사용 가능. (false는 일반 텍스트로 처리)
  • send() : 실제 이메일을 발송