스프링에서 손쉽게 메일을 보내주는설정값을
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3'implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3'
build.grable에 한줄 추가해준다.
그다음 application.yml파일에 서 설정값을 넣어준다.
spring:
mail:
host: smtp.gmail.com
port: 587
username: {구글 아이디}
password: {앱 비밀번호}
properties:
mail:
smtp:
auth: true
starttls:
enable: true
앱 비밀번호를 설정하는 법은 여기에 설명이 되어있다.
회원가입시 이메일을 보내는 형식을 맞추기 위해서
public void sendSignUpConfirmEmail(User user) {
Context context = new Context();
context.setVariable("link", "/check-email-token?token=" + user.getEmailCheckToken() +
"&email=" + user.getUserEmail());
context.setVariable("nickname", user.getUserNickname());
context.setVariable("linkName", "이메일 인증하기");
context.setVariable("message", "ZZANDI 서비스를 사용하려면 링크를 클릭하세요.");
context.setVariable("host", "http://localhost:8080");
String message = templateEngine.process("mail/simple-link", context);
EmailMessage emailMessage = EmailMessage.builder()
.to(user.getUserEmail())
.subject("ZZANDI, 회원 가입 인증")
.message(message)
.build();
emailService.sendEmail(emailMessage);
}
context에 원하는 값을 model에 값을 넣어주는것처럼 키-벨류 형식으로 넣어준다.
다음 templateEngine에서 넣고싶은 html파일을 작성해준다.
simple-link.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ZZANDI</title>
</head>
<body>
<div>
<p>안녕하세요. <span th:text="${nickname}"></span>님</p>
<h2 th:text="${message}">메시지</h2>
<div>
<a th:href="${host + link}" th:text="${linkName}">Link</a>
<p>링크가 동작하지 않는 경우에는 아래 URL을 웹브라우저에 복사해서 붙여 넣으세요.</p>
<small th:text="${host + link}"></small>
</div>
</div>
<footer>
<small>ZZANDI© 2022</small>
</footer>
</body>
</html>
EmailMessage.java
@Data
@Builder
public class EmailMessage {
private String to;
private String subject;
private String message;
}
EmilService.java
private final JavaMailSender javaMailSender;
public void sendEmail(EmailMessage emailMessage) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
mimeMessageHelper.setTo(emailMessage.getTo());
mimeMessageHelper.setSubject(emailMessage.getSubject());
mimeMessageHelper.setText(emailMessage.getMessage(), true);
javaMailSender.send(mimeMessage);
log.info("sent email: {}", emailMessage.getMessage());
} catch (MessagingException e) {
log.error("failed to send email", e);
throw new RuntimeException(e);
}
}
대략이정도면 알아서 원하는 부분에 첨가를 하면 이메일 서비스를 쉽게 추가할수 있다.
이메일이 잘온다. 여기서 이메일 보내는 동안 브라우저는 응답이 올떄까지 기다려야 하는 단점이 있다. 사용자들은 기다리게 된다. 따라서 비동기 처리를 해주는것이 좋다.
@Async Annotation을 사용해주면 손쉽게 비동기 처리가 가능하다.
'Spring Boot' 카테고리의 다른 글
[에러]H2에서 User 테이블 생성시 에러 해결법 (1) | 2022.08.06 |
---|---|
[spring] Spring Mail AuthenticationFailedException 해결 (0) | 2022.05.08 |
[spring] 위도 경도를 받아서 Point형으로 db에 저장하기(Mysql 위치데이터) (0) | 2022.03.20 |
spring boot 어노테이션 정리 (0) | 2022.01.02 |
스프링 기초 적어보기 (0) | 2021.12.23 |