구글 보안 및 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>

 

 

성공한 메일

복사했습니다!