Java - SpringBoot借助Java Mail Sender(基于javax/jakarta.mail)发邮件

SpringBoot+JavaMailSender发送邮件 SpringBoot+JavaMailSender发送邮件 概述 spring提供了发送邮件的接口JavaMailSender,通过JavaMailSender可以实现后端发送邮件,并且可以根据不同业务需求,利用JavaMailSender定制化发送邮件工具。spring boot +JavaMailSender接口发送邮件步骤如下 1、在pom.xml中引入spring-boot-starter-mail依赖 <dependency> <grou 阅读详情
AI摘要

本文介绍了SMTP和POP3协议在电子邮件系统中的作用,详细讲解了如何在Springboot项目中使用JavaMailSender发送简单邮件、带附件和HTML邮件,以及如何利用Thymeleaf创建和发送邮件模板。

邮件基础

SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。

SMTP 是一个基于 TCP/IP 的应用层协议,有点类似于 HTTP,80端口,SMTP 服务器默认监听的端口号为 25 。

假设从 aaa@qq.com 发送邮件到 bbb@163.com :

aaa@qq.com用户 先将邮件投递到腾讯的邮件服务器
腾讯的邮件服务器将邮件投递到网易的邮件服务器
bbb@163.com用户登录网易的邮件服务器查看邮件

也就是说 aaa@qq.com 用户先将邮件投递到腾讯的 SMTP 服务器这个过程就使用了 SMTP 协议,然后腾讯的 SMTP 服务器将邮件投递到网易的 SMTP 服务器这个过程也依然使用了 SMTP 协议,SMTP 服务器就是用来收邮件。

而 POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则

当邮件到达网易的 SMTP 服务器之后, bbb@163.com 用户需要登录服务器查看邮件。

邮件服务商会为每一个用户提供专门的邮件存储空间,SMTP 服务器收到邮件之后,就将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。


邮箱设置

 如果直接在邮件服务商的页面操作自然无需额外操作。

现在我们需要在程序中发邮件,那就得先去账号中开启相应的服务:

首先到电子邮箱的设置页面开启SMTP,获得SMTP的服务器域名和端口号,成功开启后会获得服务密码,这个服务密码需要再程序中使用,用户验证身份,请将其记录下来。


引入依赖

Springboot项目中引入依赖:

I/O下的Java Mail Sender

pom文件中显示:

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

原javax包现改为了jakarta,如果是旧版本则是javax


配置文件

#配置 SMTP 服务器地址
spring.mail.host=smtp.163.com
#SMTP 服务器的端口
spring.mail.port=465
#配置邮箱用户名
spring.mail.username=********@163.com
#配置密码,注意,不是真正的密码,而是刚刚申请到的服务密码
spring.mail.password=*************
#默认的邮件编码
spring.mail.default-encoding=UTF-8
#配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
spring.mail.properties.mail.debug=true
#官方建议使用 465 端口,而 465 端口是 SSL 协议的,所以不仅要换端口,
#还需要进行 SSL 协议替换。下面是在 application.properties 进行的邮件发送相关配置,
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.socketFactory.port=465


发送简单邮件

@Autowired
JavaMailSender javaMailSender;

@Test
public void sendSimpleMail() {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setSubject("这是一封测试邮件");
    message.setFrom("xxx@163.com");
    message.setTo("xxx@qq.com");
    // message.setCc("xxx@qq.com"); // 普通抄送邮件接收者可以看到邮件都抄送给了哪些人
    // message.setBcc("xxx@qq.com"); // 盲抄送邮件接收者则看不到
    message.setSentDate(new Date());
    message.setText("这是测试邮件的正文");
    javaMailSender.send(message);
}


发送带附件的邮件

@Autowired
JavaMailSender javaMailSender;

@Test
public void sendAttachFileMail() throws MessagingException {
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
    helper.setSubject("这是一封测试邮件");
    helper.setFrom("xxx@163.com");
    helper.setTo("xxx@qq.com");
    // helper.setCc("xxx@qq.com");
    // helper.setBcc("xxx@qq.com");
    helper.setSentDate(new Date());
    helper.setText("这是测试邮件的正文");
    helper.addAttachment("测试图片.jpg", new File("C:\\Users\\Administrator\\Desktop\\1.jpg"));
    javaMailSender.send(mimeMessage);
}


发送HTML邮件

@Autowired
JavaMailSender javaMailSender;

@Test
public void sendImgResMail() throws MessagingException {
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
    helper.setSubject("这是一封测试邮件");
    helper.setFrom("xxx@qq.com");
    helper.setTo("xxx@qq.com");
    helper.setCc("xxx@qq.com");
    // helper.setBcc("xxx@qq.com");
    // helper.setSentDate(new Date());
    helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>", true);
    helper.addInline("p01", new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\1.jpg")));
    helper.addInline("p02", new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\2.jpg")));
    javaMailSender.send(mimeMessage);
}

这里的邮件 text 是一个 HTML 文本,里边涉及到的图片资源先用一个占位符占着

setText 方法的第二个参数 true 表示第一个参数是一个 HTML 文本。

setText 之后,再通过 addInline 方法来添加图片资源。


使用 Thymeleaf 作邮件模板发送HTML邮件

正常来说,邮件的内容都是比较的丰富的,所以大部分邮件都是通过 HTML 来呈现的,如果直接拼接 HTML 字符串,这样以后不好维护,为了解决这个问题,一般邮件发送,都会有相应的邮件模板。最具代表性的两个模板就是 Freemarker 模板和 Thyemeleaf 模板了

推荐在 Spring Boot 中使用 Thymeleaf 来构建邮件模板。因为 Thymeleaf 的自动化配置提供了一个 TemplateEngine,通过 TemplateEngine 可以方便的将 Thymeleaf 模板渲染为 HTML ,同时,Thymeleaf 的自动化配置在这里是继续有效的 。

引入 Thymeleaf 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>工号</td>
        <td th:text="${num}"></td>
    </tr>
    <tr>
        <td>薪水</td>
        <td th:text="${salary}"></td>
    </tr>
</table>
<div style="color: #ff1a0e">一起努力创造辉煌</div>
</body>
</html>
@Autowired
JavaMailSender javaMailSender;

@Autowired
TemplateEngine templateEngine;

@Test
public void sendThymeleafMail() throws MessagingException {
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
    helper.setSubject("这是一封测试邮件");
    helper.setFrom("xxx@163.com");
    helper.setTo("xxx@qq.com");
    // helper.setCc("xxx@qq.com");
    // helper.setBcc("xxx@qq.com");
    helper.setSentDate(new Date());
    Context context = new Context();
    context.setVariable("username", "javaboy");
    context.setVariable("num", "000001");
    context.setVariable("salary", "99999");
    String process = templateEngine.process("mail.html", context);
    helper.setText(process, true);
    javaMailSender.send(mimeMessage);
}

import org.thymeleaf.context.Context;

【项目实战】Spring Boot集成JavaMailSender发送邮件 JavaMailSender是Spring提供的,非常好用的,实现邮件发送的接口在Spring Boot的Starter模块中也为此提供了自动化配置,支持发送邮件JavaMailSenderImpl是spring封装的邮件发送封装类,支持普通文本、附件、html。 阅读详情

相关推荐

【SpringBoot笔记38】SpringBoot基于jakarta.mail依赖实现发送邮件的功能(邮件发送)

发送邮件之前,我们需要知道发件人邮件、邮件服务器地址、邮件服务器、邮箱授权码(相当于发送邮件时候的认证密码)等信息,一般在实际开发中,这些信息都是作为配置信息存放在application.yml配置文件里面,SpringBoot已经给我们提供了mail邮箱的配置信息。到此,邮箱授权码就获取到啦,记住啦,这个东西是要放到application.yml配置文件里面的,并且不要随便让别人知道,不然别人就可以是要你的邮箱啦。接着点击【管理服务】,此时会跳转到安全设置界面,在这个界面中就可以生成【邮箱授权码】了。

✅ Java 开发工程师 1244

使用JavaMailSender进行邮件发送

以前发送邮件可能大家需要使用javax下的mail包,自己创建session,mimemessage这种;其实spring帮我们集成了一下,让发邮件变的更简单、可靠。

yiyuzz的博客 7659

springboot+JavaMailSender搭建简单的邮件发送系统

在今天的数字化时代,电子邮件依然是沟通与合作的重要工具。对于Java开发者来说,如何在应用程序中高效地发送邮件是一个常见需求。Spring框架中的JavaMailSender接口正是为此而生,它提供了一个简洁而强大的API,让我们能够轻松地在Spring应用中集成邮件发送功能。本文将带你深入了解JavaMailSender,包括其基本概念、配置方法以及实际使用案例。JavaMailSender是Spring框架提供的一个接口,用于发送电子邮件。

水果623的博客 1万+

JavaMail发送邮件

请注意,发送邮件的具体实现方式可能因邮件服务器的不同而有所差异。这个地方有个问题, 就是。, 这个地方不细说了直接。

qq_37038626的博客 4915

FPGA实战:手把手教你实现VESA DSC编码(附Verilog代码解析)

本文详细介绍了如何使用FPGA实现VESA DSC编码器,包括核心架构设计、Verilog代码实现与优化技巧。通过流水线设计、色彩空间转换和预测编码等关键技术,帮助开发者掌握工业级DSC编码器的开发流程,并提供实用的调试与性能优化方法。

weixin_29165725的博客 403

ADS系列之SI&PI仿真笔记:ADS多种版本的安装、卸载&重装(一)

此系列仅作为ADS学习过程的记录,如有错误的地方还请大佬指正! 一、下载&安装 ADS软件下载&安装还算比较简单,目前接触到有两个版本:ADS2017和ADS2019。这里贴下链接,破解教程里面都有: ADS2017下载地址:https://pan.baidu.com/s/1l-Bs9owKRmp5Pv0Mt92OYA 提取码:wuzf ADS2019下载地址:吴川斌的博客-w...

Claudedy的博客 3万+

SpringBoot邮件发送功能实现与优化指南

邮件发送是企业级应用中的基础功能,通过SMTP协议实现消息传递。SpringBoot框架通过starter-mail组件简化了JavaMail的集成,支持自动化配置、多协议适配和模板引擎整合。在微服务架构中,邮件服务常用于用户通知、验证码发送等场景。本文以SpringBoot为例,详解如何配置SMTP参数、实现文本/HTML邮件发送,并分享Thymeleaf模板整合、异步发送等实战技巧。针对高并发场景,提供了连接池优化和降级方案,同时涵盖DKIM签名等安全防护措施,帮助开发者构建可靠的邮件通知系统。

weixin_30947043的博客 394

关于图像傅里叶变换得到的频谱图的通俗理解

傅里叶变换过程: 经过傅里叶变化且频谱居中化处理的频谱图: 1.如果将图像某一行上的灰度变化看作是一个离散信号,那么整张图像可以看作是一个分布在二维平面上的信号,因此图像可看作是空间域信号。傅里叶变换则是将图像灰度分布(空间域信号)变换到了频域上,给我们提供了观察图像的另一个视角。 2.图像的频谱图(频谱居中后)的中心点是频率最低点,以该点为圆心,不同半径的上的点表示不同的频率。这里的图像频率是指对应原图像中的某灰度曲线变化的快慢(这么说不严谨,但是按照上面第1点的角度,似乎也可以这么理解

daimashiren的博客 2万+

SpringBoot整合JavaMail实现高效邮件服务

邮件服务作为企业级应用的基础设施,在用户注册验证、系统通知等场景中发挥着关键作用。JavaMail作为Java平台的邮件API标准,提供了SMTP、POP3等协议的底层支持,但其原生API存在配置复杂、样板代码多等问题。SpringBoot通过自动配置和starter机制,将JavaMail封装为开箱即用的MailSender组件,显著降低了开发复杂度。该技术方案支持HTML模板渲染、附件发送、连接池优化等企业级特性,结合Thymeleaf等模板引擎可实现动态邮件内容生成。在电商、金融等行业中,这种技术组合

weixin_34037173的博客 513

海康线扫相机平场矫正实战:从原理到精准成像

本文深入解析了海康线扫相机平场矫正的原理与实战操作。通过拆解暗场与明场矫正的物理意义,揭示了其消除系统噪声、补偿像素响应不均的核心机制。文章详细指导了在海康相机上进行平场矫正的标准化流程、关键参数设置(如行高、灰度值控制)及常见误区,并提供了针对高行频匹配、环境稳定性维护等进阶调优技巧与问题排查指南,旨在帮助用户实现从原理理解到精准成像的跨越。

tomato的博客 790

别再为UE5像素流部署踩坑了!Windows服务器单实例保姆级避坑指南(含Node.js证书、coturn空文件夹等常见问题解决)

本文提供了UE5像素流在Windows服务器单实例部署中的全面解决方案,涵盖Node.js证书过期、coturn空文件夹等常见问题。通过详细的步骤指导和配置建议,帮助开发者高效完成部署,避免常见陷阱,特别适合局域网环境下的应用场景。

weixin_30315435的博客 463

2.1 JavaMailSender发送邮件

发送邮件 步骤: 1、邮箱设置 -启用客户端SMTP服务 2、Spring Email -导入jar包 -邮箱参数设置 -使用JavaMailSender发送邮件 3、模板引擎 -使用Thymeleaf发送HTML邮件 启用smtp服务 SMTP的全称是“SimpleMailTransferProtocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地,SMTP服务器就是

m0_54866636的博客 1321

【云原生】阿里云SLS日志自定义字段标签实现日志告警

样例:一个典型的java log初始化日志格式把日志中的INFO提取出来做为一个标签,在开源日志框架中,配置采集器实现- regex:在阿里云SLS日志服务同样可以实现,首先我们进入到一个日志库,查看数据接入,我这里使用的是Logtail工具在【处理配置】中,选择【处理插件组合】,新增提取字段插件原始字段:填写要被提取的日志,对应原始字段的内容做正则结果字段:正则表达式对应的捕获组对应结果:捕获组 匹配内容 说明1 ywgy-app-service 服务名称。

CN_Eden 742

邮件发送 javaMailSender自动注入失败四步走

邮件发送 自动注入失败

2303_77130572的博客 3566

2024年 Flutter 面试题大全(2024.6.28持续更新中)

2024年 Flutter 面试题大全(持续更新中)

Code Metaverse 6663

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7201

JavaMailSender发送邮件(整合SpringBoot、解决空指针异常问题)

一、邮箱开启SMTP服务 以qq邮箱为例 进入邮箱设置页面后选择账户 移动至下方的POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 选择开启IMAP/SMTP服务,并获得授权码 二、导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId&gt

qq_25046827的博客 5426

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

javaMailSender 发送邮件,基于Spring Boot

javaMailSender 发送邮件,基于 Spring Boot

Leslie_Lei的博客 1157

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用 JavaMailSender 发送邮件的详细指南

在现代 Java 应用中,发送邮件是一个常见且重要的功能,尤其在用户注册和密码重置等场景中。Spring 框架提供的接口,可以帮助我们简化这一过程。本文将以 QQ 邮箱为例,详细介绍如何使用发送邮件,并展示具体的代码示例。

2301_77646169的博客 1774

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

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

Java发送邮件

helper.addAttachment(“文件.docx”,new File(“C:\Users\admin\Desktop\测试邮件附件信息.docx”));// 7. (文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)// 10. 设置(文本+图片)和 附件(若有) 的关系(合成一个大的混合“节点” / Multipart )transport.connect(“smtp.qq.com”, “发件人邮箱”, “发件人的授权码”);

2401_89690381的博客 1216

JavaMail邮件发送服务

基于SpringBoot来设置发送邮件的服务。导入依赖</</</首先去自己的邮箱开启SMTP/IMAP服务,获取授权码。写入配置文件,password填写自己的邮箱授权码。

这是我的笔记本,记录学习历程,分享学习经验,菜鸡一枚,感谢支持! 1282

在Spring Boot中使用JavaMailSender发送邮件

用了这么久的Spring Boot,我们对Spring Boot的了解应该也逐步进入正轨了,这篇文章讲的案例也在我们的实际开发中算是比较实用的了,毕竟我们完成注册功能和对用户群发消息,都可以采用到邮箱发送功能,往下看,我们来看看什么是JavaMailSender。

好看的皮囊千篇一律,有趣的灵魂万里挑一。 3084

SpringBoot 依赖之Java Mail Sender邮件发送

通过以上步骤,我们在 IntelliJ IDEA 中创建了一个 Spring Boot 项目,添加了 Java Mail Sender 依赖,并配置了发送电子邮件的服务。这个示例项目可以帮助你快速上手并实现邮件发送功能。确保在文件中正确配置了邮件服务器属性(例如 QQMail 的 SMTP 服务器),可以根据你的实际需求调整配置。如果有学习过程中遇到问题,可以留言讨论,看到后,我会第一时间予以回复。这里实现的基本的文本级别的邮件内容,后期会更新 结合模板引擎Thymeleaf 发送定制模板的邮件内容。

ahauedu的专栏 1608

SpringBoot整合JavaMail实现发送邮件详解

想学习先了解一下JavaMail到底是什么。JavaMail用于处理电子邮件相关的编程接口,javaMail 是由Sun定义的一套收发电子邮件的API,它可以方便地执行一些常用的邮件传输,不同的厂商可以提供自己的实现类,但它并没有包含在jdk中,而是作为javaEE的一部分。学习邮件发送之前先了解3个概念,这些概念规范了邮件操作过程中的标准。操作使用IMAP协议在邮箱中也会被删除,而使用POP3协议邮箱中不会被删除。:简单说就是SMPT是发邮件的标准,POP3是收邮件的标准,IMAP是对POP3的升级。

qq_43842093的博客 1221

java发邮件 动态切换当前发送人

最近项目需要实现一个发送邮件功能,踩了一些坑,最终实现了。 在此写一下心得 开始做的时候一塌糊涂,觉得挺难的,但是做完之后发现其实简单的一批,接下来我就来写一下实现流程。 1、准备好拿来发送邮件的账号,发邮件的时候需要用到(这里拿网易126邮箱为例)。 好,点击开启后,发送验证短信就拿到了,这里已经完成了一大半了。 2、接下来去配置我们的后台。 2.1、pom.xml 引入 jar <dependency> <groupId>org.springframewor

weixin_41327271的博客 1976

Springboot集成JavaMail Sender发送邮件

spring-boot-starter-mail 是 Spring Boot 的一个 Starter,它提供了集成 JavaMail Sender 和对应配置的自动配置。

weixin_53333436的博客 1182
下一篇: Java - Comparable接口和Comparator接口的区别
「已注销」
博客等级 码龄5年 413粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值