공작소 서비스를 개발하는 과정에서, 지원 취소 등 공고에 관련된 변경사항을 전달할 수 있는 방법으로 이메일을 선택했다.
웹 서비스는, 앱 서비스와 달리 실시간으로 알림을 전송하기 굉장히 어려운 편이다. Web Push Notification을 활용할 수 있지만, 실시간으로 알림이 가는 것의 우선순위가 높지 않아 이메일로 안내하는 것으로 결정했다.
(추후, Web Push Notification에 대해서도 정리 및 적용해볼 예정이다.)
좌측의 보안 탭을 클릭한다.
2단계 인증을 사용하고 있지 않다면, 사용하도록 변경한다.
앱 비밀번호를 생성한다.
기존에는 보안 페이지에서 앱 비밀번호 생성 탭이 바로 노출되었지만, 패스키 등 보안 관련된 업데이트로 인해, 노출되지 않으므로 검색을 통해서 접근하는 것이 편리하다.
Gmail에 접속하여 좌측 탭 리스트에서 라벨 관리를 클릭하여 설정 페이지에 접속한다.
전달 및 POP/IMAP에 접속한다.
POP 사용 및 IMAP 사용으로 설정 후, 변경사항을 저장한다.
SMTP
보내는 메일(SMTP) 서버POP
들어오는(POP) 서버IMAP
수신 메일(IMAP) 서버
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-mail'
...
}
일반적으로, Spring에서는 Java Mail Sender 인터페이스를 활용해서 이메일을 전송할 수 있다. spring-boot-starter-mail은 Java Mail Sender 인터페이스를 구현한 구현체를 직접적으로 활용할 수 있도록 제공하고 있기에, 해당 의존성을 주입하여 이메일을 전송할 수 있게 된다.
spring:
mail:
host: smtp.gmail.com
port: 587
username: ${mail.username}
password: ${mail.password}
properties:
mail:
smtp:
auth: true
timeout: 5000
starttls:
enable: true
smtp.gmail.com
기입)@gmail.com
까지 모두 기입해주어야 한다.)Java Mail Sender에서는 SimeMailMessage와 MimeMessage 중 하나의 방식으로 메일을 전송할 수 있다.
SimpleMailMessage
본문은 문자열 형식의 text만 전송 가능
MimeMessage
MimeMessage는 아래의 MimeMessageHelper를 활용하여, html 형식의 본문 또한 보낼 수 있다.
EmailClient
@Slf4j
@Component
@RequiredArgsConstructor
public class EmailClient {
private final JavaMailSender mailSender;
public void sendOneEmail(String to) {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 수신자, 제목, 본문 등 설정
String subject = "[공작소] 모집 공고 변동사항 안내";
String body = "공작소 서비스 내의 모집 중이신 공고에서 지원자의 변동사항을 안내하기 위해 발송된 메일입니다.";
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(body, true);
// Email 전송
mailSender.send(mimeMessage);
} catch (MessagingException e){
log.error("Error sending email", e);
}
}
}
레퍼런스
다음으로는 이메일 템플릿 디자인 및 html로 적용하여 이메일 내의 버튼 클릭 시, 우리 서비스로 연결되는 과정까지의 내용을 정리할 예정이다.