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

Spring Boot集成AWS SES时出现javax.mail类找不到异常

Spring Boot集成AWS SES邮件服务时遇javax.mail.MessagingException缺失问题

问题背景

尝试在Spring Boot应用中集成AWS SES邮件服务,已添加以下Maven依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ses</artifactId>
    <version>1.11.505</version>
</dependency>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

运行应用时触发如下错误:

Caused by: java.lang.NoClassDefFoundError: javax/mail/MessagingException
    at com.xr.crosscheck.config.SESConfig.javaMailSender(SESConfig.java:38) ~[classes/:na]
    at com.xr.crosscheck.config.SESConfig$$SpringCGLIB$$0.CGLIB$javaMailSender$1(<generated>) ~[classes/:na]
    at com.xr.crosscheck.config.SESConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258) ~[spring-core-6.1.2.jar:6.1.2]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-6.1.2.jar:6.1.2]
    at com.xr.crosscheck.config.SESConfig$$SpringCGLIB$$0.javaMailSender(<generated>) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.2.jar:6.1.2]
    ... 67 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
    ... 78 common frames omitted

配置类代码如下:

@Configuration
public class SESConfig {

    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

    @Value("${cloud.aws.region.static}")
    private String region;

    @Bean
    public AmazonSimpleEmailService amazonSimpleEmailService() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion(Regions.EU_CENTRAL_1)
                .build();
    }
    
    @Bean
    public JavaMailSender javaMailSender(AmazonSimpleEmailService amazonSimpleEmailService) {
        return new SimpleEmailServiceJavaMailSender(amazonSimpleEmailService);
    }
}

问题原因与解决方案

核心原因

  1. javax.mail.MessagingException类缺失:javaee-web-api依赖的scope是provided,不会被打包到应用中;且Spring Boot 3.x(从spring-core-6.1.2版本判断)基于Jakarta EE,原javax包已替换为jakarta包。
  2. 依赖版本不兼容:旧版spring-cloud-starter-aws(2.1.0.RELEASE)和AWS SDK v1(1.11.x)与Spring Boot 3.x适配性差。

解决步骤

  • 步骤1:替换邮件依赖
    移除javaee-web-api依赖,添加Jakarta Mail依赖:

    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>jakarta.mail</artifactId>
        <version>2.0.1</version>
    </dependency>
    
  • 步骤2:替换AWS相关依赖
    移除原有的spring-cloud-starter-aws和aws-java-sdk-ses,添加适配Spring Boot 3.x的AWS SDK v2依赖:

    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>ses</artifactId>
        <version>2.25.0</version>
    </dependency>
    <dependency>
        <groupId>io.awspring.cloud</groupId>
        <artifactId>spring-cloud-aws-starter-ses</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  • 步骤3:调整配置类适配AWS SDK v2

    @Configuration
    public class SESConfig {
    
        @Value("${cloud.aws.credentials.access-key}")
        private String accessKey;
    
        @Value("${cloud.aws.credentials.secret-key}")
        private String secretKey;
    
        @Value("${cloud.aws.region.static}")
        private String region;
    
        @Bean
        public SesClient sesClient() {
            AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey);
            return SesClient.builder()
                    .credentialsProvider(StaticCredentialsProvider.create(credentials))
                    .region(Region.of(region))
                    .build();
        }
    
        @Bean
        public JavaMailSender javaMailSender(SesClient sesClient) {
            return new SimpleEmailServiceJavaMailSender(sesClient);
        }
    }
    
  • 步骤4:确认配置文件
    确保application.properties或application.yml中的AWS配置正确:

    cloud.aws.credentials.access-key=你的AWS访问密钥
    cloud.aws.credentials.secret-key=你的AWS私有密钥
    cloud.aws.region.static=eu-central-1
    

内容的提问来源于stack exchange,提问作者SERKAN AYDOGDU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:14:53