HtmlEmailService 설정 변경
package me.weekbelt.studyolle.mail;
@Slf4j
@RequiredArgsConstructor
@Profile("dev")
@Component
public class HtmlEmailService implements EmailService{
private final JavaMailSender javaMailSender;
@Override
public void sendEmail(EmailMessage emailMessage) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
// ......
mimeMessageHelper.setText(emailMessage.getMessage(), true); // 수정
javaMailSender.send(mimeMessage);
log.info("sent email: {}", emailMessage.getMessage());
} catch (MessagingException e) {
log.error("failed to send email", e);
}
}
}
타임리프 템플릿으로 이메일 템플릿 생성(mail/simple-link.html)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>스터디올래</title>
</head>
<body class="bg-light">
<div>
<p class="lead">안녕하세요. <span th:text="${nickname}"></span>님</p>
<h2 th:text="${message}">메시지</h2>
<div>
<a th:href="${host + link}" th:text="${linkName}">link name</a>
<p>링크를 동작하지 않는다면 URL 복사해서 사용하는 웹 브라우저에 붙여넣으세요.</p>
<small th:text="${host + link}"></small>
</div>
</div>
<footer>
<small class="d-block mb-3 text-muted">스터디올래© 2020</small>
</footer>
</body>
</html>
로컬환경에서의 URL사용을 위해 애플리케이션 설정 추가
- application.properties에 AppProperties 추가
// ....
app.host=http://localhost:8080
이렇게 설정한 URL을 받아오기 위해 AppProperties 생성
package me.weekbelt.studyolle.config;
@Data
@Component
@ConfigurationProperties("app")
public class AppProperties {
private String host;
}
템플릿 엔진으로 HTML 본문 채워 넣기
- TemplateEngine
- Context
package me.weekbelt.studyolle.account;
@Slf4j
@Transactional
@RequiredArgsConstructor
@Service
public class AccountService implements UserDetailsService {
// .........
private final TemplateEngine templateEngine;
private final AppProperties appProperties;
// ........
public void sendSignUpConfirmEmail(Account newAccount) throws MessagingException {
// model이랑 비슷한 느낌
Context context = new Context();
context.setVariable("link", "/check-email-token?token=" +
newAccount.getEmailCheckToken() + "&email=" + newAccount.getEmail());
context.setVariable("nickname", newAccount.getNickname());
context.setVariable("linkName", "이메일 인증하기");
context.setVariable("message", "스터디올래 서비스를 사용하려면 링크를 클릭하세요.");
context.setVariable("host", appProperties.getHost());
// mail/simple-link.html을 String타입으로 생성
String message = templateEngine.process("mail/simple-link", context);
EmailMessage emailMessage = EmailMessage.builder()
.to(newAccount.getEmail())
.subject("스터디올래, 회원 가입 인증")
.message(message)
.build();
emailService.sendEmail(emailMessage);
}
// ........
public void sendLoginLink(Account account) {
// model이랑 비슷한 느낌
Context context = new Context();
context.setVariable("link", "/login-by-email?token=" + account.getEmailCheckToken() +
"&email=" + account.getEmail());
context.setVariable("nickname", account.getNickname());
context.setVariable("linkName", "스터디올래 로그인하기");
context.setVariable("message", "로그인하려면 아래 링크를 클릭하세요.");
context.setVariable("host", appProperties.getHost());
// mail/simple-link.html을 String타입으로 생성
String message = templateEngine.process("mail/simple-link", context);
account.generateEmailCheckToken();
EmailMessage emailMessage = EmailMessage.builder()
.to(account.getEmail())
.subject("스터디올래, 로그인 링크")
.message(message)
.build();
emailService.sendEmail(emailMessage);
}
// .........
}
참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1#
스프링과 JPA 기반 웹 애플리케이션 개발 - 인프런
이 강좌에서 여러분은 실제로 운영 중인 서비스를 스프링, JPA 그리고 타임리프를 비롯한 여러 자바 기반의 여러 오픈 소스 기술을 사용하여 웹 애플리케이션을 개발하는 과정을 학습할 수 있습니다. 이 강좌를 충분히 학습한다면 여러분 만의 웹 서비스를 만들거나 취직에 도움이 될만한 포트폴리오를 만들 수 있을 겁니다. 활용 웹 개발 프레임워크 및 라이브러리 Java Spring Spring Boot Spring Data JPA Thymeleaf 온라인 강의 스
www.inflearn.com
'스프링과 JPA 기반 웹 어플리케이션 개발 > 3부 개발 환경 설정' 카테고리의 다른 글
44. MimeMessage 전송하기 (0) | 2020.04.23 |
---|---|
42. 인텔리J 데이터베이스 탭 (0) | 2020.04.23 |
41. MySql 설정 (0) | 2020.04.23 |