我有一个 Spring Boot 应用程序,其中有一个电子邮件发送部分。我想将 SMTP org.springframework.mail.javamailJavaMailSenderImpl 与我的“dev”配置文件一起使用,并将 AWS SES 实现 io.awspring.cloud.ses.SimpleEmailServiceMailSender 与我的“prod”配置文件一起使用。两者都实现了 org.springframework.mail.MailSender。让它发挥作用的“正确”方法是什么?
我认为正确的解决方案是使用属性在 MailSender 实现之间进行切换。
为此,您需要知道每个邮件发件人是在什么条件下创建的。这是在 Spring Boot 的相应 AutoConfiguration 类中定义的。
仅当设置了
JavaMailSenderImpl
或 spring.mail.host
属性时,才会创建 spring.mail.jndi-name
Bean。
请参阅:https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail /MailSenderAutoConfiguration.java
仅当
SimpleEmailServiceJavaMailSender
为 spring.cloud.aws.ses.enabled
或根本未设置时,才会创建 true
Bean。
请参阅:https://github.com/awspring/spring-cloud-aws/blob/main/spring-cloud-aws-autoconfigure/src/main/java/io/awspring/cloud/autoconfigure/ses/SesAutoConfiguration.java
这意味着你必须这样配置:
在开发属性中(仅 JavaMailSenderImpl):
spring.mail.host=... # must be set
spring.cloud.aws.ses.enabled=false # must be false
在产品属性中(仅限 SimpleEmailServiceJavaMailSender):
# Do not set spring.mail.host at all
spring.cloud.aws.ses.enabled=true # can be true or omitted
要使用它们,您只需注入
MailSender
或 JavaMailSender
接口,它将使用基于属性的实现