【问题标题】:Sending Emails with Amazon SES and Spring Boot使用 Amazon SES 和 Spring Boot 发送电子邮件
【发布时间】:2022-01-23 02:09:42
【问题描述】:

我有一个 SpringBoot 应用程序。有这个依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-aws</artifactId>
  <version>2.2.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>io.awspring.cloud</groupId>
  <artifactId>spring-cloud-starter-aws-ses</artifactId>
  <version>2.3.3</version>
</dependency>

这个配置文件:

@Configuration
public class MailConfig {

    @Bean
    public AmazonSimpleEmailService amazonSimpleEmailService() {

        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new ProfileCredentialsProvider("ses-smtp-user.234221-1724219"))
                .withRegion(Regions.EU_WEST_2)
                .build();
    }

    @Bean
    public MailSender mailSender(
            AmazonSimpleEmailService amazonSimpleEmailService) {
        return new SimpleEmailServiceMailSender(amazonSimpleEmailService);
    }
}

@Service
public class NotificationService {
    
    private final MailSender mailSender;
    private final JavaMailSender javaMailSender;

    public NotificationService(MailSender mailSender, JavaMailSender javaMailSender) {
        this.mailSender = mailSender;
        this.javaMailSender = javaMailSender;
    }

    public void sendMailMessage(
            final SimpleMailMessage simpleMailMessage) {

        this.mailSender.send(simpleMailMessage);
    }

}

但是当我启动应用程序时。我有这个错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in com.dis.backend.service.NotificationService required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.

【问题讨论】:

  • 当然,您的配置类正在被 Spring 采用?可能是包问题。显示每个类和主类的包。
  • SimpleEmailServiceMailSender 没有实现JavaMailSender 接口。我想你会想在NotificationService 中注入MailSender 而不是JavaMailSender
  • 根据错误消息,删除 NotificationService 构造函数中的 JavaMailSender 构造函数参数,因为您没有在 NotificationService 中使用它。如果您还想在NotificationService 中使用JavaMailSender,则需要创建一个JavaMailSender 类型的bean,可以将其注入NoficationService
  • 是的,@GSSwain,我同意你的观点,这就是问题所在。请考虑发表评论作为答案。

标签: java spring amazon-web-services spring-boot amazon-ses


【解决方案1】:

根据错误消息,删除NotificationService 构造函数中的JavaMailSender 构造函数参数(假设您没有在NotificationService 中使用该参数)。

如果您想在NotificationService 中使用JavaMailSender,您需要创建一个JavaMailSender 类型的Bean,可以将其注入NotificationService。对于 AWS-SES,您可以通过在配置中定义以下 bean 来实现。

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

【讨论】:

  • 我很高兴看到您发布了答案并且它已被接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2012-06-22
相关资源
最近更新 更多