From c82c3e76cbf50e2db3da4527e8b35f3a2c23dc8b Mon Sep 17 00:00:00 2001 From: 101 Date: Thu, 25 Jan 2024 00:12:23 +0900 Subject: [PATCH] =?UTF-8?q?mail=20send=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/mail/service/MailSend.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/main/java/com/example/daemawiki/domain/mail/service/MailSend.java diff --git a/src/main/java/com/example/daemawiki/domain/mail/service/MailSend.java b/src/main/java/com/example/daemawiki/domain/mail/service/MailSend.java new file mode 100644 index 00000000..7e94f2fb --- /dev/null +++ b/src/main/java/com/example/daemawiki/domain/mail/service/MailSend.java @@ -0,0 +1,73 @@ +package com.example.daemawiki.domain.mail.service; + +import com.example.daemawiki.domain.mail.dto.AuthCodeRequest; +import com.example.daemawiki.domain.mail.model.AuthCode; +import com.example.daemawiki.domain.mail.repository.AuthCodeRepository; +import com.example.daemawiki.domain.mail.repository.AuthMailRepository; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; + +import java.util.Random; + +@Service +public class MailSend { + private final AuthCodeRepository codeRepository; + private final JavaMailSender mailSender; + + public MailSend(AuthCodeRepository authCodeRepository, JavaMailSender javaMailSender) { + this.codeRepository = authCodeRepository; + this.mailSender = javaMailSender; + } + + @Value("${admin.mail}") + private static String admin; + + private static final Random rand = new Random(); + + public Mono execute(AuthCodeRequest request) { + return sendMail(request.mail()) + .doOnNext(mailSender::send) + .then(); + } + + private Mono sendMail(String to) { + String authCode = getRandomCode(); + + return Mono.fromCallable(() -> { + MimeMessage message = mailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); + + helper.setTo(to); + helper.setSubject("DSM 메일 인증"); + + String mail = getMailTemplate(authCode); + + helper.setText(mail); + helper.setFrom(new InternetAddress(admin, "DSM-MAIL-AUTH")); + + return message; + }).flatMap(message -> codeRepository.save(AuthCode.builder() + .mail(to) + .code(authCode).build()) + .thenReturn(message)); + } + + private String getMailTemplate(String key) { + return "
" + + "

DSM 이메일 인증 코드 :

" + + "

" + key + "

" + + "

인증 코드는 3시간 동안 유효합니다.

" + + "
"; + } + + private String getRandomCode() { + int num = rand.nextInt(900000) + 100000; + return String.valueOf(num); + } + +}