SpringBoot学习历程(十一):SpringBoot2.X集成mail发送邮件

SpringBoot2.x 整合 邮件发送 在实际项目中,经常需要用到邮件通知功能。比如,用户通过邮件注册,通过邮件找回密码等;又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多。正常我们会用 JavaMail... 阅读详情

前言

  • 本人github仓库地址:https://github.com/RabbitsInTheGrass/springBoot-Learning
  • 暂时使用的是Spring提供的org.springframework.mail.javamail.JavaMailSender发送邮件。

1. 引入依赖

<!--引入邮件依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--引入Thymeleaf依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. 设置邮件配置信息

spring:
  #发送邮件设置
  mail:
    host: smtp.163.com
    username: xxxxxx@163.com
    #对l63邮箱,password是授权码
    password: xxxxxx
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

注意:如果发送方用的是163邮箱,password对应的是邮箱的授权码,而不是你的邮箱密码。

3. 发送邮件

3.1 发送普通文本邮件

EmailController .java

package com.rabbits.learn.controller;

import com.rabbits.learn.util.JmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.context.Context;

import java.io.File;

/**
 * @Description: 发送邮件类
 * @Author: RabbitsInTheGrass_xj
 * @Date: 2019/10/2 09:39
 */
@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private JmsUtil jmsUtil;

    /**
     * 发送简单的邮件
     *
     * @return 发送结果
     */
    @RequestMapping("sendSimpleEmail")
    public String sendSimpleEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        // 接收地址
        message.setTo("2398937985@qq.com");
        // 标题
        message.setSubject("一封简单的邮件");
        // 内容
        message.setText("使用Spring Boot发送简单邮件。");
        return jmsUtil.sendSimpleEmail(message);
    }
 }

JmsUtil .java

package com.rabbits.learn.util;

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.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.internet.MimeMessage;

/**
 * @Description: 发送邮件工具类
 * @Author: RabbitsInTheGrass_xj
 * @Date: 2019/10/2 09:45
 */
@Component
public class JmsUtil {

    private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);

    @Autowired
    private JavaMailSender jms;

    @Autowired
    private TemplateEngine templateEngine;

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

    public String sendSimpleEmail(SimpleMailMessage message) {
        try {
            message.setFrom(from);
            jms.send(message);
            return "发送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "发送失败";
        }
    }
}

3.2 发送HTML格式内容的邮件

EmailController .java

    /**
     * 发送HTML格式内容的邮件
     * @return 发送结果
     */
    @RequestMapping("sendHtmlEmail")
    public String sendHtmlEmail() {
        // 接收地址
        String toAddress = "xxxxxxx@qq.com";
        // 标题
        String subject = "一封HTML格式内容的邮件";
        // 带HTML格式的内容
        StringBuilder sb = new StringBuilder("<p style='color:#42b983'>我要发送一份HTML格式内容的邮件。</p>");
        return jmsUtil.sendHtmlEmail(toAddress,subject,sb.toString());
    }

JmsUtil .java

    public String sendHtmlEmail(String toAddress, String subject, String text) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            //true表示发送HTML格式邮件
            helper.setText(text, true);
            jms.send(message);
            return "发送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "发送失败";
        }
    }

3.3 发送带附件的邮件

EmailController .java

    /**
     *发送带附件的邮件
     * @return 发送结果
     */
    @RequestMapping("sendAttachmentsMail")
    public String sendAttachmentsMail() {
        // 接收地址
        String toAddress = "xxxxx@qq.com";
        // 标题
        String subject = "一封带附件的邮件";
        // 内容
        String text = "详情参见附件内容!";
        // 传入附件
        FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/file/xxxx.doc"));
        return jmsUtil.sendAttachmentsMail(toAddress,subject,text,file);
    }

JmsUtil .java

    public String sendAttachmentsMail(String toAddress, String subject, String text, FileSystemResource file) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(text);
            helper.addAttachment(file.getFilename(), file);
            jms.send(message);
            return "发送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "发送失败";
        }
    }

3.4 发送带静态资源的邮件

EmailController .java

    /**
     * 发送带静态资源的邮件
     * @return 发送结果
     */
    @RequestMapping("sendInlineMail")
    public String sendInlineMail() {
        // 接收地址
        String toAddress = "xxxxxxx@qq.com";
        // 标题
        String subject = "一封带静态资源的邮件";
        String contentId = "img";
        // 内容
        String text = "<html><body>一份美图:<img src='cid:" + contentId + "'/></body></html>";
        // 传入附件
        FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/yourName.jpg"));
        return jmsUtil.sendInlineMail(toAddress,subject,text,file,contentId);
    }

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String text, FileSystemResource file, String contentId) {
        MimeMessage message;
        try {
            message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(text,true);
            //contentId 必须与图片标签里cid后的名称相对应,例如:img
            helper.addInline(contentId, file);
            jms.send(message);
            return "发送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "发送失败";
        }
    }

3.5 使用模板发送邮件

在发送验证码等情况下可以创建一个邮件的模板,唯一的变量为验证码。这个例子中使用的模板解析引擎为Thymeleaf,所以必须引入Thymeleaf依赖。

EmailController .java

    /**
     * 发送模板邮件
     *
     * @param code 验证码
     * @return 发送结果
     */
    @RequestMapping("sendTemplateEmail")
    public String sendTemplateEmail(String code) {
        //接收地址
        String toAddress = "xxxxx@qq.com";
        //标题
        String subject = "发送一份模板邮件";
        //邮件模板
        String templateName = "emailTemplate";
        Context context = new Context();
        context.setVariable("code", code);
        return jmsUtil.sendInlineMail(toAddress, subject, templateName, context);

    }

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String templateName, Context context) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            // 接收地址
            helper.setTo(toAddress);
            // 标题
            helper.setSubject(subject);
            // 处理邮件模板
            String template = templateEngine.process(templateName, context);
            helper.setText(template, true);
            jms.send(message);
            return "发送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "发送失败";
        }
    }

emailTemplate.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>验证码邮件模板</title>
</head>
<body>
您好,您的验证码为<span th:text="${code}"></span>,请在两分钟内使用完成操作。
</body>
</html>

4. 启动服务验证

启动服务后请求各个方法即可。

Springboot中使用mail邮件 对于复杂消息,我们可以编辑html消息模板,以及实现动态解析的功能。另外还能够携带多附件。对于以上的内容,我们需要来把它整合成一个工具来使用。这里使用的是QQ邮箱,进入设置-账户,开启下服务。开启后获取授权码,保存自己客户端授权码。以上配置好了,我们可以写一些demo。 阅读详情

相关推荐

从零开始:使用Mask2Former训练你的专属数据集

本文详细介绍了如何从零开始使用Mask2Former训练自定义数据集。内容涵盖环境搭建、数据准备(将LabelMe格式转换为COCO格式)、数据集注册与模型配置、训练启动与调试,以及最终的模型推理与应用。通过实战步骤和常见问题解决方案,帮助读者掌握使用Mask2Former进行实例分割的核心流程,实现专属模型的训练与部署。

weixin_28678151的博客 450

Spring Boot(十二)集成spring-boot-starter-mail发送邮件

项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发送邮件,标记地址: https://github.com/FrameReserve/TrainingBoot/releases/tag/0.0.12 pom.xml

a286352250的博客 3万+

Ribo测序翻译效率计算及可视化

本文介绍了一个计算翻译效率(TE)和分析转录-翻译相关性的生物信息学流程。首先通过Python脚本从标准化表达量矩阵(TPM/FPKM)计算TE值,该脚本自动匹配转录组(RNA)和翻译组(Ribo)样本进行比值运算。然后使用R语言进行相关性分析,通过ggplot2绘制样本间转录-翻译表达量的散点图,添加线性回归线和相关系数标注,支持PNG/PDF格式输出。整个流程实现了从原始数据处理到可视化分析的全过程。

Tiaoxiaobai的博客 553

Spring Boot——集成spring-boot-starter-mail发送163邮箱|QQ邮箱|Gmail邮箱邮件

前言 发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息。正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在Spring Boot提供了一套集成spring-boot-starter-mail的更简易使用的封装。 基本概念 spring-boot-starter-mail: 官方文档 Spring Boot:https://docs.s...

无限迭代中...... 6298

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序)

西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博

weixin_42940283的博客 1万+

使用spring-boot-starter-mail实现邮件发送

介于网络上关于java发送邮件的例子太多,而真正能直接拷贝使用的太少,故有了本编文章 话不多说,先上源码:spring-boot-starter-mail-demo,不想看我啰嗦,想直接拷贝的人可以直接clone源码。 源码基于Spring boot启动,拷贝后可直接运行。想要借鉴的朋友可以直接拷贝MailSendService和MailSendServiceImpl以及application

TEXOUS的博客 2957

深入解析MTK DRM初始化流程:从KMS模块到组件框架

本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。

onion的博客 766

Spring boot发送邮件过程及问题整理

Spring boot发送邮件过程及问题整理贴一个今天的报错信息使用springboot发送邮件更改邮箱配置Spingboot pom.xml文件添加依赖Springboot .properties文件配置Controller层生成验证码util代码 最开始参考的是网上的普遍教程,用的qq邮箱,但是qq邮箱及其不稳定。 有时候发送成功,有时候不能发送成功。 而且今天在运行的时候,突然崩了,我去qq邮箱查看了一下,显示不能找到qq邮箱服务器ip。 果断放弃了qq邮箱,转用了163邮箱,非常nice!! 贴一个

qq_44157558的博客 1319

电机控制实战:SVPWM五段式与七段式算法在STM32上的实现对比

本文深入对比了SVPWM五段式与七段式算法在STM32上的实现效果,详细分析了两种算法在占空比控制、开关损耗和波形质量等方面的差异。通过实测数据,为工程师提供了针对不同应用场景的选型建议,包括电池供电设备和高精度伺服控制系统的优化方案。

h6i7j8的博客 584

资源描述框架RDF及Turtle

文章目录1. RDF1.1 简介1.2 格式1.3 RDF的要求2. Turtle2.1 语法2.1.1 简单三元组2.1.2 Turtle中的命名空间2.1.3 Base URI2.1.4 谓语列表2.1.5 宾语列表2.1.6 空白节点(bNodes)2.1.7 数据类型2.1.8 Class membership2.1.9 空URI2.1.10 集合 1. RDF 1.1 简介 RDF(Resource Description Framework)语义网的标准数据模型,是一个用于描述 Web 上的资

doublewhite233的博客 2494

SpringBoot快速实现发送邮件

前言:Spring提供了非常好用的JavaMailSender接口实现邮件发送。由于SpringBoot的Starter模块也为此提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。 SpringBoot中发送邮件具体的使用步骤如下 1、添加Starter模块依赖 2、添加Spring Boot邮箱配置(QQ/网易163/Gma

何哥的博客 2万+

PCL 基于法线微分(DoN)的点云分割【2026最新版】

基于法线微分的分割。博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 39万+

SpringBoot 2.x ——使用 mail 实现邮件发送

springboot使用mail实现邮件内容的发送,带附件、图片等

专注写bug 4424

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringBoot2.x系列教程69--SpringBoot中整合Mail实现邮件发送

SpringBoot2.x系列教程69--SpringBoot中整合邮件发送 作者:一一哥 注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个JavaMailSender接口,可以实现发送邮件功能。 而在Spring Boot中提供了一个对应的spring-boot-starter-mail依赖,添加该依赖后,Spring Boot...

一一哥 2472

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Boot 2.x 图文教程 | 集成邮件发送功能

文章首发自个人微信公众号: 小哈学Java 个人网站: https://www.exception.site/springboot/spring-boots-send-mail 大家好,后续会间断地奉上一些 Spring Boot 2.x 相关的博文,包括 Spring Boot 2.x 教程和 Spring Boot 2.x 新特性教程相关,如 WebFlux 等。还有自定义 Start...

犬小哈 1520

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【转载】SpringBoot集成Java Mail实现邮件发送功能

SpringBoot集成Java Mail实现邮件发送功能 概述 springboot-email是基于SpringBoot环境集成Java Mail,并实现了邮件发送功能,包括简易邮件发送、html正文邮件发送、内联资源(静态资源)邮件发送、模板邮件发送 实现步骤分析 引入相关依赖 <dependencies> <dependency> ...

威尼斯的泪 622

springboot2.x+mail实现邮件发送

这篇文章介绍springboot的邮件发送。 由于很简单就没有分出server和imp之类,只是在controller简单写个方法进行测试。 1.pom文件加入spring-boot-starter-mail <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0...

weixin_45546418的博客 613

【SpringBoot框架篇】27.集成mail实现邮件推送带网页样式的消息

文章目录1.引入依赖2.邮箱信息配置类3.发送邮件的工具类4.main函数测试发送邮件5.集成js插件ueditor编写带样式的邮件正文5.1.页面集成插件5.2.编写后台接口接收数据并发送邮件6.项目配套代码 1.引入依赖 <!--发送邮件需要的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <a

皓亮君的博客 2513

SpringBoot专题学习Part29:SpringBoot的Async异步任务、Scheduled定时任务、mail邮件发送任务

一、Async异步任务 在Java应用中绝大多数情况下默认都是通过同步的方式来实现交互处理的 但在处理与第三方系统交互的时候 容易造成响应迟缓的情况 可以使用多线程来完成此类任务 但其实 在Spring 3.x之后 已经内置了@Async注解来完美解决该问题 首先来模拟一个同步任务响应迟缓的场景 以供比较: Service: @Service public class AsyncService {...

"✧treasure mountain✧" 8169

SpringBoot2.x教程--SpringBoot中整合邮件发送

注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个JavaMailSender接口,可以实现发送邮件功能。 而在Spring Boot中提供了一个对应的spring-boot-starter-mail依赖,添加该依赖后,Spring Boot将创建一个默认的JavaMailSender,该sender可以通过spring.mail命名空间下的配置项进一步自定义。 2. 发送邮件的场景 用户通过邮件注册激活; 通过邮件找回密码; 通过邮件发

qianfeng_dashuju的博客 1172

SpringBoot 2.X从0到1实现邮件发送功能

Spring中提供了JavaMailSender接口实现邮件发送功能,在SpringBoot2.X中也封装了发送邮件相关的Starter并且提供了自动化配置。 本文目录 一、添加对应的Starter二、添加发送邮件相关的配置三、实现发送邮件功能四、实现过程中踩过的坑1.中文附件乱码问题2.无法注入JavaMailSender问题 一、添加对应的Starter...

weixin_30432179的博客 184

SpringBoot集成Java Mail实现邮件发送功能

SpringBoot集成Java Mail实现邮件发送功能 概述 springboot-email是基于SpringBoot环境集成Java Mail,并实现了邮件发送功能,包括简易邮件发送、html正文邮件发送、内联资源(静态资源)邮件发送、模板邮件发送 实现步骤分析 引入相关依赖 &amp;lt;dependencies&amp;gt; &amp;lt;dependency&amp;gt; ...

业精于勤-行成于思 8114

基于SpringBoot的邮件发送

基于SpringBoot的邮件发送 1.导入依赖坐标 <!--邮件任务--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.3.1.RELEASE</version> </dependency&g

weixin_44001012的博客 434

SpringBoot集成Mail功能

1. 邮件介绍 1.1 邮件的作用 邮件在项目中会经常用到,例如:注册,验证,找回密码,登录,信息通知 1.2 邮件协议 SMTP协议:       SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。 IMAP协议 :  &nbsp

qq_15740267的博客 1113

SpringBoot整合JavaMail实现邮件发送全解析

邮件发送是现代应用系统中的基础功能模块,基于SMTP协议实现。SpringBoot通过自动配置机制简化了JavaMail集成,开发者只需引入spring-boot-starter-mail依赖并配置SMTP参数即可快速实现邮件功能。核心原理是Spring自动创建JavaMailSender实例,封装了Jakarta Mail API的复杂操作。在工程实践中,邮件服务通常需要支持文本、HTML、附件等多种格式,并考虑模板化、异步发送等高级特性。SpringBoot与Thymeleaf模板引擎的整合可以轻松实现

xpp02的专栏 481
上一篇: idea的update提示Can't Update No tracked branch configured for branch master or branch...
下一篇: SpringBoot学习历程(十二):SpringBoot2.0集成redis
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabbitsInTheGrass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值