@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() : 실제 이메일을 발송
'Programming > Java' 카테고리의 다른 글
[Spring] Gmail SMTP를 이용하여 이메일 인증 구현 - 인증코드 검증 (0) | 2025.03.24 |
---|---|
[Spring] Gmail SMTP를 이용하여 이메일 인증 구현 - 이메일 발송 프로그램(2) (0) | 2025.03.21 |
[Spring] Gmail SMTP를 이용하여 이메일 인증 구현 - 데이터의 흐름 (0) | 2025.03.21 |
[Spring] Gmail SMTP를 이용하여 이메일 인증 구현 - 설정 (0) | 2025.03.21 |
[Error : Mybatis/jdbc] ORA-12541:접속할 수 없습니다. host (host name) port 1521에 리스너가 없습니다. (0) | 2025.03.15 |