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) } } }