Skip to content

Commit

Permalink
feat: mail send 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
sanggae4133 committed Nov 8, 2024
1 parent 5666ed2 commit 7f742e0
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 0 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/com/on/server/global/mail/MailController.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
57 changes: 57 additions & 0 deletions src/main/java/com/on/server/global/mail/MailService.java
Original file line number Diff line number Diff line change
@@ -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 + "<h1>" + number + "</h1>"
);
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) + 최소값
}

}
3 changes: 3 additions & 0 deletions src/main/java/com/on/server/global/util/StaticValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "<h3>On: 이용에 감사드립니다.</h3><h3>아래 인증번호를 서비스에 입력해주시기 바랍니다.</h3><h3>감사합니다.</h3>";

}

0 comments on commit 7f742e0

Please sign in to comment.