From 1f9941202e822f9062914ebc78327823461fbdac Mon Sep 17 00:00:00 2001 From: 2ghrms Date: Thu, 21 Aug 2025 23:06:02 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor/#334:=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=ED=98=95=EC=8B=9D=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - email 형식 검증 메소드 추가 및 검증 적용 --- .../apiPayload/code/status/ErrorStatus.java | 1 + .../haru/api/infra/mail/SmtpEmailSender.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java index 9e239dcf..f6ca759b 100644 --- a/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java @@ -70,6 +70,7 @@ public enum ErrorStatus implements BaseErrorCode { // 메일 관련 에러 MAIL_SEND_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "MAIL500", "이메일 전송에 실패했습니다."), + MAIL_INVALID_FORMAT(HttpStatus.BAD_REQUEST, "MAIL400", "이메일 형식이 잘못되었습니다."), // SNS 이벤트 관련 에러 SNS_EVENT_NOT_FOUND(HttpStatus.BAD_REQUEST, "SNSEVENT4001", "SNS 이벤트가 존재하지 않습니다."), diff --git a/src/main/java/com/haru/api/infra/mail/SmtpEmailSender.java b/src/main/java/com/haru/api/infra/mail/SmtpEmailSender.java index 4ebea824..7e391d16 100644 --- a/src/main/java/com/haru/api/infra/mail/SmtpEmailSender.java +++ b/src/main/java/com/haru/api/infra/mail/SmtpEmailSender.java @@ -3,6 +3,8 @@ import com.haru.api.global.apiPayload.code.status.ErrorStatus; import com.haru.api.infra.mail.handler.MailHandler; import jakarta.mail.MessagingException; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -27,6 +29,13 @@ public void send( String title, String content ) { + // 1. 이메일 형식 검증 + if (!isValidEmail(to)) { + log.warn("잘못된 이메일 형식 - {}", to); + throw new MailHandler(ErrorStatus.MAIL_INVALID_FORMAT); + } + + // 2. 메일 전송 시도 try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8"); @@ -44,5 +53,16 @@ public void send( throw new MailHandler(ErrorStatus.MAIL_SEND_FAIL); } } + + // RFC 형식 검증 + private boolean isValidEmail(String email) { + try { + InternetAddress internetAddress = new InternetAddress(email); + internetAddress.validate(); // 형식이 틀리면 AddressException 발생 + return true; + } catch (AddressException e) { + return false; + } + } } From 7aa61870b71d48cea737442d585845d994ae6109 Mon Sep 17 00:00:00 2001 From: 2ghrms Date: Thu, 21 Aug 2025 23:07:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor/#334:=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=ED=98=95=EC=8B=9D=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - email 형식 검증 메소드 추가 및 검증 적용 --- .../com/haru/api/global/apiPayload/code/status/ErrorStatus.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java index f6ca759b..f512f785 100644 --- a/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/haru/api/global/apiPayload/code/status/ErrorStatus.java @@ -69,7 +69,7 @@ public enum ErrorStatus implements BaseErrorCode { INVALID_CHOICE_FOR_QUESTION(HttpStatus.BAD_REQUEST, "MOODTRACKER4011", "분위기 트래커 질문에 유효하지 않은 선택지입니다."), // 메일 관련 에러 - MAIL_SEND_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "MAIL500", "이메일 전송에 실패했습니다."), + MAIL_SEND_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "MAIL500", "이메일 전송에 실패했습니다. (존재하지 않는 이메일일 수 있습니다)"), MAIL_INVALID_FORMAT(HttpStatus.BAD_REQUEST, "MAIL400", "이메일 형식이 잘못되었습니다."), // SNS 이벤트 관련 에러