目录

前言

分析

解决方案


前言

        小伙伴们大家好,最近在个人项目中引入发送邮件的功能时,遇到了问题,异常部分的代码如下,编写的时候JavaMailSender可以正常引入,配置文件中的mail信息也填好了的,但是项目启动遇到报错,报错信息如下,意思就是spring容器中找不到JavaMailSender

Description: A component 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.

    @Resource
    private JavaMailSender javaMailSender;
    @Override
    public void sendMail(Email email) {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(email.getSendTo());
            mimeMessageHelper.setSubject(email.getSubject());
            mimeMessageHelper.setText(email.getContent(),true);
            javaMailSender.send(mimeMessage);

        } catch (MessagingException e) {
            log.error("send mail error , the mail subject if -> {}",email.getSubject(),e);
            throw new RuntimeException(e);
        }
    }
}

分析

        使用的是SpringBoot框架,通常不需要手动配置JavaMailSender bean,因为Spring Boot提供了自动配置功能,可以按照以下方式进行排查和解决:

一、检查依赖:确保项目pom.xml文件中包含了Spring Boot Mail的起步依赖。

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

二、确认配置信息:在application.yml配置文件中填写邮件发送所需的相关信息

    mail:
      host: smtp.qq.com
      protocol: smtp
      default-encoding: UTF-8
      username: xxx@qq.com
      password: xxxxxx

三、检查是否排除自动配置:检查配置类,确保没有排除MailSender相关的自动配置。

四、查看启动日志:启动应用程序时,查看控制台输出的日志信息,检查是否有关于JavaMailSender bean创建失败的错误信息

五、手动创建Bean:尝试手动创建JavaMailSender bean并注入

解决方案

        配置检查过后没问题,最终选择手动注入,代码如下,再次重启项目,没有报错

@Configuration注解标识这是一个配置类

@Bean注解标识该方法返回一个bean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class MailConfiguration {

    @Bean
    public JavaMailSenderImpl JavaMailSender(){
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost("smtp.qq.com");
        javaMailSender.setUsername("xxx@qq.com");
        javaMailSender.setPassword("xxxxxx");
        return javaMailSender;
    }
}

                                                                     --- end ---

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐