From 4077f259baba74b298456570be6e7382f4834ab5 Mon Sep 17 00:00:00 2001 From: fakerdeft Date: Tue, 17 Mar 2026 10:44:23 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20GmailFallbackMailConfig=20SMTP=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=20=EC=99=B8=EB=B6=80?= =?UTF-8?q?=ED=99=94=20-=20FallbackMailProperties=20@ConfigurationProperti?= =?UTF-8?q?es=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80=20-=20Gma?= =?UTF-8?q?ilFallbackMailConfig=20=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0,=20props.properties=EB=A1=9C=20=EC=9D=BC?= =?UTF-8?q?=EA=B4=84=20=EC=A3=BC=EC=9E=85=20-=20MailAdapter=20fallbackFrom?= =?UTF-8?q?Email=20@Value=20=EC=A0=9C=EA=B1=B0,=20FallbackMailProperties?= =?UTF-8?q?=20=EC=A3=BC=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config | 2 +- .../com/maggom/app/adapter/MailAdapter.kt | 7 ++--- .../app/config/FallbackMailProperties.kt | 13 ++++++++++ .../app/config/GmailFallbackMailConfig.kt | 26 ++++++------------- 4 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 app/src/main/kotlin/com/maggom/app/config/FallbackMailProperties.kt diff --git a/app/config b/app/config index e85c606..d824dc5 160000 --- a/app/config +++ b/app/config @@ -1 +1 @@ -Subproject commit e85c606625246e82e8d41010d132c5d5c9d77ef4 +Subproject commit d824dc534b6b56ac95a455f1e2fe23321b9b6240 diff --git a/app/src/main/kotlin/com/maggom/app/adapter/MailAdapter.kt b/app/src/main/kotlin/com/maggom/app/adapter/MailAdapter.kt index d094080..74b3333 100644 --- a/app/src/main/kotlin/com/maggom/app/adapter/MailAdapter.kt +++ b/app/src/main/kotlin/com/maggom/app/adapter/MailAdapter.kt @@ -1,5 +1,6 @@ package com.maggom.app.adapter +import com.maggom.app.config.FallbackMailProperties import com.maggom.auth.port.out.AuthCodeEmailMessage import com.maggom.auth.port.out.EmailSenderPort import com.maggom.auth.port.out.TestMailPort @@ -27,7 +28,7 @@ class MailAdapter( private val templateEngine: TemplateEngine, @Value("\${spring.mail.from-email}") private val fromEmail: String, @Value("\${spring.mail.from-name}") private val fromName: String, - @Value("\${maggom.mail.fallback.from-email:#{null}}") private val fallbackFromEmail: String?, + @Autowired(required = false) private val fallbackMailProps: FallbackMailProperties?, @Autowired(required = false) @Qualifier("gmailMailSender") private val fallbackMailSender: JavaMailSender?, private val marathonEventPort: MarathonEventPort, ) : EmailSenderPort, WelcomeMailPort, NotificationMailPort, TestMailPort { @@ -94,9 +95,9 @@ class MailAdapter( try { doSend(mailSender, fromEmail, to, subject, html) } catch (e: MailException) { - if (fallbackMailSender != null && fallbackFromEmail != null) { + if (fallbackMailSender != null && fallbackMailProps != null) { log.warn("주 발송 실패, Gmail 폴백 시도 [to={}, subject={}]: {}", to, subject, e.message) - doSend(fallbackMailSender, fallbackFromEmail, to, subject, html) + doSend(fallbackMailSender, fallbackMailProps.fromEmail, to, subject, html) } else { throw e } diff --git a/app/src/main/kotlin/com/maggom/app/config/FallbackMailProperties.kt b/app/src/main/kotlin/com/maggom/app/config/FallbackMailProperties.kt new file mode 100644 index 0000000..ec1cfd0 --- /dev/null +++ b/app/src/main/kotlin/com/maggom/app/config/FallbackMailProperties.kt @@ -0,0 +1,13 @@ +package com.maggom.app.config + +import org.springframework.boot.context.properties.ConfigurationProperties + +@ConfigurationProperties("maggom.mail.fallback") +data class FallbackMailProperties( + val host: String, + val port: Int, + val username: String, + val password: String, + val fromEmail: String, + val properties: Map = emptyMap(), +) diff --git a/app/src/main/kotlin/com/maggom/app/config/GmailFallbackMailConfig.kt b/app/src/main/kotlin/com/maggom/app/config/GmailFallbackMailConfig.kt index c09a5c4..b2b7023 100644 --- a/app/src/main/kotlin/com/maggom/app/config/GmailFallbackMailConfig.kt +++ b/app/src/main/kotlin/com/maggom/app/config/GmailFallbackMailConfig.kt @@ -1,6 +1,6 @@ package com.maggom.app.config -import org.springframework.beans.factory.annotation.Value +import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Profile @@ -9,29 +9,19 @@ import org.springframework.mail.javamail.JavaMailSenderImpl @Configuration @Profile("prod") +@EnableConfigurationProperties(FallbackMailProperties::class) class GmailFallbackMailConfig( - @Value("\${maggom.mail.fallback.host}") private val host: String, - @Value("\${maggom.mail.fallback.port}") private val port: Int, - @Value("\${maggom.mail.fallback.username}") private val username: String, - @Value("\${maggom.mail.fallback.password}") private val password: String, + private val props: FallbackMailProperties, ) { @Bean("gmailMailSender") fun gmailMailSender(): JavaMailSender { return JavaMailSenderImpl().apply { - host = this@GmailFallbackMailConfig.host - port = this@GmailFallbackMailConfig.port - this.username = this@GmailFallbackMailConfig.username - this.password = this@GmailFallbackMailConfig.password - javaMailProperties.apply { - put("mail.smtp.auth", "true") - put("mail.smtp.starttls.enable", "true") - put("mail.smtp.starttls.required", "true") - put("mail.smtp.ssl.trust", "smtp.gmail.com") - put("mail.smtp.connectiontimeout", "5000") - put("mail.smtp.timeout", "5000") - put("mail.smtp.writetimeout", "5000") - } + host = props.host + port = props.port + this.username = props.username + this.password = props.password + javaMailProperties.putAll(props.properties) } } }