diff --git a/build.gradle b/build.gradle index c7a6b174..adc18db0 100644 --- a/build.gradle +++ b/build.gradle @@ -97,6 +97,9 @@ dependencies { // Google Firebase Admin implementation 'com.google.firebase:firebase-admin:9.2.0' + // Spring Mail + implementation 'org.springframework.boot:spring-boot-starter-mail' + } tasks.named('test') { diff --git a/src/main/java/com/on/server/global/mail/MailController.java b/src/main/java/com/on/server/global/mail/MailController.java new file mode 100644 index 00000000..2103694d --- /dev/null +++ b/src/main/java/com/on/server/global/mail/MailController.java @@ -0,0 +1,23 @@ +package com.on.server.global.mail; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/mail") +public class MailController { + + private final MailService mailService; + + @GetMapping("/test") + public Integer sendAuthNumMail( + @RequestHeader String targetMailAddr + ) { + return mailService.sendAuthNumMail(targetMailAddr); + } + +} diff --git a/src/main/java/com/on/server/global/mail/MailService.java b/src/main/java/com/on/server/global/mail/MailService.java new file mode 100644 index 00000000..03c5d3db --- /dev/null +++ b/src/main/java/com/on/server/global/mail/MailService.java @@ -0,0 +1,57 @@ +package com.on.server.global.mail; + +import com.on.server.global.common.ResponseCode; +import com.on.server.global.common.exceptions.InternalServerException; +import com.on.server.global.util.StaticValue; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +@Service +@Configuration +@RequiredArgsConstructor +public class MailService { + + private final JavaMailSender javaMailSender; + + @Value("${spring.mail.sender}") + private static String senderEmail; + + public Integer sendAuthNumMail(String targetMailAddr) { + Integer number = createNumber(); + + MimeMessage message = CreateMail( + targetMailAddr, + StaticValue.AUTH_NUMBER_MAIL_SUBJECT, + StaticValue.AUTH_NUMBER_MAIL_BODY + "

" + number + "

" + ); + javaMailSender.send(message); + + return number; + } + + private MimeMessage CreateMail(String targetMailAddr, String mailSubject, String mailBody) { + MimeMessage message = javaMailSender.createMimeMessage(); + + try { + message.setFrom(senderEmail); + message.setRecipients(MimeMessage.RecipientType.TO, targetMailAddr); + message.setSubject(mailSubject); + message.setText(mailBody,"UTF-8", "html"); + } catch (MessagingException e) { + throw new InternalServerException(ResponseCode.INTERNAL_SERVER, "메일 내용 생성에 실패했습니다."); + } + + return message; + } + + private Integer createNumber() { + return (int)(Math.random() * (90000)) + 100000; // (int) Math.random() * (최댓값-최소값+1) + 최소값 + } + +} diff --git a/src/main/java/com/on/server/global/util/StaticValue.java b/src/main/java/com/on/server/global/util/StaticValue.java index f124d85b..177d8647 100644 --- a/src/main/java/com/on/server/global/util/StaticValue.java +++ b/src/main/java/com/on/server/global/util/StaticValue.java @@ -5,4 +5,7 @@ public class StaticValue { public final static Long JWT_ACCESS_TOKEN_VALID_TIME = 1000L * 60 * 60; // 1시간 public final static Long JWT_REFRESH_TOKEN_VALID_TIME = 1000L * 60 * 60 * 24 * 14; // 2주 + public final static String AUTH_NUMBER_MAIL_SUBJECT = "On: 이메일 인증"; + public final static String AUTH_NUMBER_MAIL_BODY = "

On: 이용에 감사드립니다.

아래 인증번호를 서비스에 입력해주시기 바랍니다.

감사합니다.

"; + }