학원에서 팀 프로젝트를 진행하느라 한 달 동안 블로그 포스팅은 물론, 다른 일들도 제대로 하지 못할 정도로 바빴습니다. 사실 그 바쁜 와중에도 TIL 정도는 작성할 시간이 있었을 텐데, 제 게으름도 한몫한 것 같습니다.
이제 프로젝트도 막바지에 이르렀으니, 다시 마음을 다잡고 블로그와 TIL 작성을 꾸준히 하려고 합니다. 이번 한 달 동안 한층 성장한 제 모습과 앞으로 더 발전할 모습을 블로그를 통해 함께 보여드리고자 합니다.
저는 이번에 두 가지 프로젝트를 진행하면서 처음 사용해 본 기술들을 중심으로 블로그에 소개하려고 합니다. 오늘은 그 중 가장 간단하게 구현한 JavaMailSender를 이용해 인증 메일을 발송하는 시스템에 대해 소개하려고 합니다.
로직 소개
이 로직은 사용자가 회원가입이나 비밀번호를 잊었을 때, 인증번호를 이메일로 받아 인증할 수 있도록 하는 기능을 제공합니다. 이를 위해 Spring Boot와 JavaMailSender를 사용하여 이메일 발송 서비스를 구현했습니다.
코드 설명
먼저, 이메일 발송 서비스를 담당하는 EmailService 클래스를 살펴보겠습니다. 이 클래스는 사용자의 이메일로 인증번호를 발송하는 기능을 제공합니다.
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender emailSender;
public void sendAuthNum(String email, String random) throws MessagingException {
String htmlContent = "<html>" +
"<body>" +
"<h1 style='color: orange;'>인증번호 발송</h1>" +
"<p>인증번호는 <b>" + random + "</b> 입니다.</p>" +
"</body>" +
"</html>";
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setTo(email);
helper.setSubject("[Pethub] 인증번호");
helper.setText(htmlContent, true);
emailSender.send(message);
}
}
코드 설명
1. 이메일 내용 구성
먼저, 이메일의 내용을 HTML 형식으로 구성합니다. 여기서 사용자가 입력한 인증번호를 포함하여 이메일 본문을 작성합니다.
String htmlContent = "<html>" +
"<body>" +
"<h1 style='color: orange;'>인증번호 발송</h1>" +
"<p>인증번호는 <b>" + random + "</b> 입니다.</p>" +
"</body>" +
"</html>";
이 코드는 간단한 HTML을 사용하여 인증번호를 포함한 이메일 본문을 만듭니다. random 변수는 인증번호를 저장하고 있으며, 태그를 사용해 굵게 표시합니다.
2. 이메일 메시지 생성
이메일 메시지를 생성하기 위해 JavaMailSender의 createMimeMessage() 메서드를 사용합니다.
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
MimeMessageHelper는 메시지 구성의 편리함을 제공하며, 두 번째 매개변수는 멀티파트 메시지를 생성할지 여부를 나타냅니다. 여기서는 true로 설정하여 HTML 본문을 포함한 메시지를 생성합니다.
3. 이메일 설정
다음으로, 이메일의 수신자, 제목, 본문을 설정합니다.
helper.setTo(email);
helper.setSubject("[Pethub] 인증번호");
helper.setText(htmlContent, true);
- setTo(email): 수신자의 이메일 주소를 설정합니다.
- setSubject("[Pethub] 인증번호"): 이메일의 제목을 설정합니다.
- setText(htmlContent, true): 이메일의 본문을 설정합니다. 두 번째 매개변수는 HTML 형식을 사용하도록 지정합니다.
4. 이메일 전송
마지막으로, emailSender를 사용하여 이메일을 전송합니다.
emailSender.send(message);
마무리
이렇게 해서 자바메일샌더를 이용한 인증메일 발송 서비스를 구현해 보았습니다. 이 기능은 회원가입이나 아이디 찾기 등의 기능에서 사용자의 이메일로 인증번호를 발송하여 인증을 받는 중요한 역할을 합니다.
메일을 발송하기 위해서는 application.yml에 추가적으로 다음과 같은 설정들을 요구합니다만, password를 발급받는 과정등은 검색해보면 손쉽게 내용을 찾을 수 있으니 따로 검색해보시길 추천드립니다.
mail:
host: smtp.gmail.com
port: 587
username: "사용자의 이메일"
password: "비밀번호(이메일비밀번호아님)"
properties.mail.smtp:
auth: true
starttls:
enable: true
required: true