You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot能否配置两种MailSender实现?多环境适配方案求解

Spring Boot多环境配置不同MailSender实现

1. 引入对应依赖

在pom.xml中添加两个环境所需的依赖:

<!-- dev环境:SMTP邮件依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

<!-- prod环境:AWS SES邮件依赖 -->
<dependency>
    <groupId>io.awspring.cloud</groupId>
    <artifactId>spring-cloud-aws-starter-ses</artifactId>
    <version>3.0.0</version> <!-- 替换为与Spring Boot版本兼容的版本 -->
</dependency>

2. 分环境配置参数

创建不同环境的配置文件,分别配置对应邮件服务的参数:

application-dev.yml(开发环境)

spring:
  mail:
    host: smtp.example.com
    port: 587
    username: your-dev-email@example.com
    password: your-dev-email-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

application-prod.yml(生产环境)

spring:
  cloud:
    aws:
      ses:
        region: us-east-1 # 替换为你的AWS SES服务区域
      credentials:
        access-key: your-aws-access-key # 可省略,优先使用ECS/EC2实例角色凭证
        secret-key: your-aws-secret-key

3. 条件化注册MailSender Bean

编写配置类,通过@Profile注解控制不同环境下对应Bean的创建:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import io.awspring.cloud.ses.SimpleEmailServiceMailSender;
import software.amazon.awssdk.services.ses.SesClient;

@Configuration
public class MailSenderConfig {

    // 开发环境:注册SMTP实现的MailSender
    @Bean
    @Profile("dev")
    public MailSender devMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        // 可直接读取application-dev.yml中的spring.mail配置,无需手动设置
        return mailSender;
    }

    // 生产环境:注册AWS SES实现的MailSender
    @Bean
    @Profile("prod")
    public MailSender prodMailSender(SesClient sesClient) {
        // SesClient由awspring starter自动配置,直接注入即可
        return new SimpleEmailServiceMailSender(sesClient);
    }
}

4. 业务层依赖注入

在业务代码中直接依赖MailSender接口,Spring会根据当前激活的环境自动注入对应的实现类:

import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    private final MailSender mailSender;

    // 构造函数注入MailSender接口
    public EmailService(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendEmail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }
}

5. 激活对应环境

启动应用时,通过以下方式指定激活的环境:

  • 命令行参数:--spring.profiles.active=dev 或 --spring.profiles.active=prod
  • 全局配置文件:在application.yml中设置spring.profiles.active=dev

内容的提问来源于stack exchange,提问作者Slava Imeshev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:55:16