spring 启动时在一个环境中使用 Amazon SES,在另一个环境中使用 gmail SMTP

Using Amazon SES in one environment and gmail SMTP in the other environment in spring boot

我有一种情况,我想在我的环境 1 中使用 Gmail SMTP,在环境 2 中使用 Amazon SES 来发送电子邮件。我知道如何单独实现这些中的每一个,但无法以无需为不同环境进行特殊设置的方式让它同时工作。

我遇到的问题是,对于 Gmail SMTP,属性是在 application.properties 文件中定义的,我正在使用如下所示的自动配置

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=myEmail
spring.mail.password=myPassword
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

但是对于SES,我正在定义配置bean,如下所示-

@Configuration
public class EmailConfig {

  @Bean
  public AmazonSimpleEmailService amazonSimpleEmailService() {

    return AmazonSimpleEmailServiceClientBuilder.standard()
        .build();
  }

  @Bean
  public JavaMailSender javaMailSender(AmazonSimpleEmailService amazonSimpleEmailService) {
       
    return new SimpleEmailServiceJavaMailSender(amazonSimpleEmailService);
  }
}

我试过:

  1. 正在寻找一种在我的 env2 application.properties 中定义 SES 电子邮件配置的方法,但无法使其工作,因为此配置使用 IAM 角色发送电子邮件。你在上面看到的配置 class 是我所有的,也是发送电子邮件所需的全部。 (没有秘密密钥,访问密钥)。
  2. 找到一种方法来通过配置定义我的 env1 的属性 class 并使用在两个 applicaiton.properties 文件中定义的 'environment' 属性 在不同的环境中创建不同的 JavaMailSender 对象但我也无法使其工作,因为我不知道如何在我的 JavaMailSenderImpl 对象上设置 spring.mail.properties.mail.smtp.starttls.enabl 和 spring.mail.properties.mail.smtp.auth 等属性。

我知道我为此苦苦挣扎的原因是我缺乏技能。请帮助我获得一些。任何能达到预期结果的有效解决方案将不胜感激。 谢谢。

在这种情况下,spring 引导注释 ConditionalOnProperty 就派上用场了。定义一个新的 属性 电子邮件提供商类型并使用该 属性 来驱动要创建的 bean