구글 보안 및 Gamil 설정하기
구글 설정 계정관리에 들어간다.
보안에서 2단계 인증을 on 해준다.
이 후 바로 아래의 앱 비밀번호를 생성해주면 된다.
기기용 앱 비밀번호를 기억해 둔다.
gradle 추가
spring-start-mail
//mail
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3'
Thymeleaf5
//타임리프
implementation group: 'org.thymeleaf', name: 'thymeleaf-spring5', version: '3.0.11.RELEASE'
properties 추가
spring.mail.password=[복사한 비밀번호]
ThymeleafConfig 추가
@Configuration
public class ThymeleafConfig {
@Bean
public JavaMailSender javaMailSender() {
return new JavaMailSenderImpl();
}
@Bean
public TemplateEngine htmlTemplateEngine() {
TemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(springResourceTemplateResolver());
return templateEngine;
}
@Bean
public SpringResourceTemplateResolver springResourceTemplateResolver() {
SpringResourceTemplateResolver springResourceTemplateResolver = new SpringResourceTemplateResolver();
springResourceTemplateResolver.setOrder(1);
springResourceTemplateResolver.setPrefix("classpath:templates/");
springResourceTemplateResolver.setSuffix(".html");
springResourceTemplateResolver.setTemplateMode(TemplateMode.HTML);
springResourceTemplateResolver.setCharacterEncoding("UTF-8");
springResourceTemplateResolver.setCacheable(false);
return springResourceTemplateResolver;
}
}
MailUtils
@Slf4j
@Configuration
public class MailUtils {
private JavaMailSender javaMailSender;
private final TemplateEngine templateEngine;
private final String PASSWORD;
public MailUtils(TemplateEngine templateEngine,
@Value("${spring.mail.password}") String password) {
this.templateEngine = templateEngine;
this.PASSWORD = password;
}
@PostConstruct
public void init() {
javaMailSender = setJavaMailSender();
}
/*
* 이메일 메세지와 제목 그리고 누구에게 보낼지 설정하는 메소드 (Text)
* massage : 전송할 메세지
* subject : 전송할 메세지의 제목
* toUser : 보낼 이메일
* */
public SimpleMailMessage makeMassageText(String massage, String subject, String toUser) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(toUser);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(massage);
return simpleMailMessage;
}
/*
* 이메일 메세지와 제목 그리고 누구에게 보낼지 설정하는 메소드 (HTML)
* massage : 전송할 메세지
* subject : 전송할 메세지의 제목
* toUser : 보낼 이메일
* */
public MimeMessage makeMassageHtml(String massage, String subject, String toUser) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
Context context = new Context();
context.setVariable("massage", massage);
mimeMessage.addRecipients(MimeMessage.RecipientType.TO, toUser);
mimeMessage.setSubject(subject);
mimeMessage.setText(templateEngine.process("mail", context), "utf-8", "html");
return mimeMessage;
}
/*
* text 이메일 전송하는 메소드
* makeMassageText() 에서 만들어진 객체를 인자로 주면된다.
* */
public void sendEmail(SimpleMailMessage simpleMailMessage) {
javaMailSender.send(simpleMailMessage);
}
/*
* html 이메일 전송하는 메소드
* makeMassageHtml() 에서 만들어진 객체를 인자로 주면된다.
* */
public void sendEmail(MimeMessage simpleMailMessage) {
javaMailSender.send(simpleMailMessage);
}
/*
* 랜덤값의 값이 설정되는 메소드
* size : 랜덤값의 사이즈를 입력받음
* ex ) makeRandomUUID(4) = 1515 , makeRandomUUID(7) = 1515157
* */
public String makeRandomUUID(int size) {
return UUID.randomUUID().toString().replaceAll("-", "").substring(0, size);
}
/*
* javaMailSender 설정
* */
public JavaMailSenderImpl setJavaMailSender() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.gmail.com");
javaMailSender.setPort(587);
javaMailSender.setUsername("whitewise95@gmail.com");
javaMailSender.setPassword(PASSWORD);
Properties prop = new Properties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.debug", "true");
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.EnableSSL.enable", "true");
javaMailSender.setJavaMailProperties(prop);
return javaMailSender;
}
resources/templates/mail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</div>
<h1 style="margin-left: 385px; padding-top: 50px;" th:text="${massage}"></h1>
</div>
</body>
</html>
성공한 메일
'몰아 넣기' 카테고리의 다른 글
[Collection] HashMap의 특징, 사용법 (0) | 2022.08.16 |
---|---|
[JUnit5] JUnit5 개념 및 간단한 사용법 (0) | 2022.08.13 |
[java8] 자바 Stream의 foreach 와 for-loop에 대해서 (0) | 2022.07.14 |
[Spring/AWS] S3 저장소와 스프링부트(Spring Boot) 연동하기 및 사용법 (0) | 2022.07.12 |
[java/spring] Enum변수를 json으로 변환하여 Enum 값 전달하기 (0) | 2022.07.10 |