springboot3 解决:Could not autowire. No beans of ‘JavaMailSender‘ type found

简介: 因为 spring-boot-starter-mail 默认使用某些包发生了变化,在 2.2.xx 版本前后不一,解决对应bug

👏 Hi! 我是 Yumuing,一个技术的敲钟人

👨‍💻 每天分享技术文章,永远做技术的朝拜者

📚 欢迎关注我的博客:Yumuing's blog

  • Could not autowire. No beans of 'JavaMailSender' type found.
  • Incompatible types. Found: 'jakarta.mail.internet.MimeMessage', required: 'org.springframework.mail.javamail.MimeMailMessage'

两个 Bug 都是由于同一个问题,报错信息关键词是 JavaMailSender,在很多老博文中解决这两个Bug,要么就是 application.yml 没有配置好,导致报错,正确配置如下:

spring
    mail:
        host: smtp.qq.com
        # 邮箱账号
        username: xxxxxxxx
        # 授权码
        password: xxxxxxxxxxx
        port: 465
        protocol: smtps
        properties:
          mail:
            smtp:
              ssl:
                enable: true
                required: false
              debug: true

要么就是导包缺少,当然,在 springboot 中,不会出现该问题,但是可能出现导包错误,因为 spring-boot-starter-mail 默认使用的某些包发生了变化,在 2.2.xx 版本前都是使用 javax 进行发送邮件的,而在之后,采用的是 Jakarta 进行发送邮件的,Jakarta Mail的前生是JavaMail。JavaMail最后一个版本是于2018年8月发布,已经停止更新。新项目应该使用 Jakarta Mail。而两者的接口方法几乎一致,在创建对象时却采用了不一样的包,如:javaMailSender.createMimeMessage(),一旦发生混用就会导致以上的两个错误,所以,给大家一个正确的导包模板,如下:

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

版本请从 mvn仓库查看符合自身 springboot 版本的
注意这两个包不要导错:

  • import org.springframework.mail.javamail.JavaMailSender;
  • import org.springframework.mail.javamail.MimeMessageHelper;

不要导成 javax 的包。

package top.yumuing.community.util;

import jakarta.mail.MessagingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;


@Component
public class MailClient {
   
   
    private static final Logger logger = LoggerFactory.getLogger(MailClient.class);

    @Autowired(required = false)
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String mailFrom;

    public void sendMail(String to, String subject, String content){
   
   
        try {
   
   
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true);
            mimeMessageHelper.setFrom(mailFrom);
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content, true);
            javaMailSender.send(mimeMessageHelper.getMimeMessage());
            logger.info("邮件发送成功!");
        }catch (MessagingException e){
   
   
            logger.error("发送邮件失败!");
        }
    }
}

其中,如果没有添加 (required = false) 也会发生报错,但不影响运行,只是存在一个红线而已,前提是你配置好了邮箱。
@Autowired(required = false)
private JavaMailSender javaMailSender;

测试方法:

@Autowired
private MailClient mailClient;
@Test
    public void testTextMail() {
   
   
        mailClient.sendMail("想要发给哪个邮箱", "TEST", "Welcome.");
    }

效果如下:

邮件接收演示

求点赞

目录
相关文章
|
Java Spring
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
442 0
SpringBoot:Invalid bound statement (not found)的原因和解决方案
SpringBoot:Invalid bound statement (not found)的原因和解决方案
|
IDE Java Maven
Spring Boot启动失败问题:hile scanning for the next token found character '@'
Spring Boot启动失败问题:hile scanning for the next token found character '@'
985 0
springboot之log4j:WARN No appenders could be found for logger
springboot之log4j:WARN No appenders could be found for logger
springboot之log4j:WARN No appenders could be found for logger
|
Java Spring
spring boot Configuration Annotation Proessor not found in classpath(贼简单)
spring boot Configuration Annotation Proessor not found in classpath(贼简单)
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
5月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
5月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。

热门文章

最新文章