Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件

提示:这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件


文章目录

  • Spring boot 发送文本邮件 和 html模板邮件
  • 一、开启QQ邮箱里的POP3/SMTP服务
    • ①:开启步骤
  • 二、简单配置
    • ①:引入依赖
    • ②:yml配置
  • 三、发送纯文本文件
    • ①:写个工具类
    • ②:在业务层调用方法发送即可
    • ③:发送成功
  • 四、发送Html模板邮件
    • ①:定义一个Html模板
    • ②:在工具类中新增两个方法
    • ③:发送成功


提示:以下是本篇文章正文内容,下面案例可供参考

一、开启QQ邮箱里的POP3/SMTP服务

①:开启步骤

1.邮箱设置 -->账号

在这里插入图片描述

2.开启服务(并复制 授权码

在这里插入图片描述在这里插入图片描述

二、简单配置

①:引入依赖

  <!--        邮件发送--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

②:yml配置

  mail:username: xxxx@foxmail.com# QQ邮箱应该使用授权码password: *****ek***## 邮箱服务器地址 smtp.qq.comhost: smtp.qq.com#使用SMTPS协议465端口port: 465# ssl 配置properties:mail.smtp.starttls.required: trueencoding: UTF-8mail.smtp.ssl.enable: truemail.smtp.auth: truemail.smtp.socketFactory.port: 465mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactorymail.smtp.socketFactory.fallback: false

三、发送纯文本文件

①:写个工具类

@Component
@Slf4j
public class UtilsSendCode {@Value("${spring.mail.username}")private String sender;@Resourceprivate JavaMailSenderImpl mailSender;/*** 发送纯文字邮件* @param to 收件人* @param subject 主题* @param content 内容*/public void sendSimpleMail(String to, String subject, String content) {//创建SimpleMailMessage对象SimpleMailMessage message = new SimpleMailMessage();//邮件发送人message.setFrom(sender);//邮件接收人message.setTo(to);//邮件主题message.setSubject(subject);//邮件内容message.setText(content);//发送邮件try {mailSender.send(message);log.info("邮件接收人"+to+"主题"+subject+"内容"+content+"邮件发送成功");}catch (Exception e){log.error("邮件接收人"+to+"主题"+subject+"内容"+content+"邮件发送出现异常");log.error("异常信息为"+e.getMessage());}}
}

②:在业务层调用方法发送即可

  // 开始发送邮件utilsSendCode.sendSimpleMail("xxxxxx@gmail.com", "验证码", "123456");

在这里插入图片描述

③:发送成功

1.发送测试

在这里插入图片描述

2.收到验证码

在这里插入图片描述

四、发送Html模板邮件

①:定义一个Html模板

1.template/mailTemplate.ftl

在这里插入图片描述

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="email code"><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<!--邮箱验证码模板-->
<body>
<div style="background-color:#ECECEC; padding: 35px;"><table cellpadding="0" align="center"style="width: 800px;height: 100%; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;"><tbody><tr><th valign="middle"style="height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: RGB(148,0,211); background-color: RGB(148,0,211); border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;"><font face="微软雅黑" size="5" style="color: rgb(255, 255, 255); ">这里输入name</font></th></tr><tr><td style="word-break:break-all"><div style="padding:25px 35px 40px; background-color:#fff;opacity:0.8;"><h2 style="margin: 5px 0px; "><font color="#333333" style="line-height: 20px; "><font style="line-height: 22px; " size="4">尊敬的用户:</font></font></h2><!-- 中文 --><p>您好!感谢您使用****,您的账号正在进行邮箱验证,验证码为:<font color="#ff8c00">{0}</font>,有效期30分钟,请尽快填写验证码完成验证!</p><br><!-- 英文 --><h2 style="margin: 5px 0px; "><font color="#333333" style="line-height: 20px; "><font style="line-height: 22px; " size="4">Dear user:</font></font></h2><p>Hello! Thanks for using *****, your account is being authenticated by email, theverification code is:<font color="#ff8c00">{0}</font>, valid for 30 minutes. Please fill in the verification code as soon aspossible!</p><div style="width:100%;margin:0 auto;"><div style="padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;"><p>****团队</p><p>联系我们:********</p><br><p>此为系统邮件,请勿回复<br>Please do not reply to this system email</p><!--<p>©***</p>--></div></div></div></td></tr></tbody></table>
</div>
</body>
</html>

②:在工具类中新增两个方法

  • 根据模板生成邮件内容
    /*** 根据模板生成邮件内容* @param code 验证码* @return*/public String buildContent(String code) {//加载邮件html模板ClassPathResource resource = new ClassPathResource("template/mailTemplate.ftl");InputStream inputStream = null;BufferedReader fileReader = null;StringBuffer buffer = new StringBuffer();String line = "";try {inputStream = resource.getInputStream();fileReader = new BufferedReader(new InputStreamReader(inputStream));while ((line = fileReader.readLine()) != null) {buffer.append(line);}} catch (Exception e) {log.error("发送邮件读取模板失败{}", e.toString());} finally {if (fileReader != null) {try {fileReader.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}//替换html模板中的参数return MessageFormat.format(buffer.toString(), code);}
  • 发送HTML邮件
    /*** 发送HTML邮件* @param to 收件人* @param subject 主题* @param code 内容(验证码)*/public void sendEmailByHtml(String to, String subject, String code) {//获取MimeMessage对象MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper messageHelper;try {messageHelper = new MimeMessageHelper(message, true);//邮件发送人messageHelper.setFrom(sender);//邮件接收人messageHelper.setTo(to);//邮件主题message.setSubject(subject);//邮件内容,html格式messageHelper.setText(buildContent(code), true);//发送mailSender.send(message);//日志信息log.info("邮件已经发送。");} catch (MessagingException e) {log.error("发送邮件时发生异常!", e);}}

③:发送成功

1.业务层调用方法直接发送即可

 // 开始发送邮件utilsSendCode.sendEmailByHtml("xxxx9@gmail.com", "验证码", "559955");

2.测试请求

在这里插入图片描述

3.发送成功

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.均值滤波

1 简介 均值滤波是一种低通滤波&#xff0c;它可以有效过滤图片中的椒盐噪声&#xff0c;但是副作用也同样明显&#xff0c;会使图片的边缘过于模糊。   均值滤波的卷积核系数均为1。   这里最终重复一下算法实现以及验证的步骤&#xff1a;     1.MATLAB读取图片并转化…

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时&#xff0c;我们可能会遇到一些隐藏文件&#xff0c;比如.gitkeep文件。它通常出现在Git项目的子目录中&#xff0c;主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时&#xff0c;使用Terminal命令来显示隐藏文件 default…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b

模型训练 Mixtral-8x7b地址&#xff1a;魔搭社区 GitHub: hiyouga/LLaMA-Factory: Unify Efficient Fine-tuning of 100 LLMs (github.com) 环境配置 git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda activate lla…

支持 java22,Solon v2.7.3 发布(非 java-ee 架构)

Java Solon 是什么框架&#xff1f; 是一个可平替 Spring 生态的 Java 应用开发框架。从零开始构建&#xff08;非 java-ee 架构&#xff09;&#xff0c;有自己的标准规范与开放生态。&#xff08;历时七年&#xff0c;具备全球第二级别的生态规模&#xff09; 追求&#xf…

小程序利用WebService跟asp.net交互过程发现的问题并处理

最近在研究一个项目&#xff0c;用到asp.net跟小程序交互&#xff0c;简单的说就是小程序端利用wx.request发起请求。获取asp.net 响应回来的数据。但经常会报错。点击下图的测试按钮 出现如下错误&#xff1a; 百思不得其解&#xff0c;试了若干方法&#xff0c;都不行。 因为…

多线程基础:线程通信内容补充

多线程基础&#xff1a;线程通信内容补充 文章目录 多线程基础&#xff1a;线程通信内容补充前言一、wait(), notify(), notifyAll()二、join()三、Lock 和 Condition四、并发集合和原子变量1、并发集合2、原子变量 总结 前言 前文内容中讲了线程通信的内容&#xff0c;但是不…

企业网站建设的方法的相关问题的解决办法的问题

现在市场上比较大的公司都建立了自己的企业网站&#xff0c;比如华为、小米等&#xff0c;在他们的企业网站中&#xff0c;可以充分展示自己产品的优势&#xff0c;介绍公司的优质服务。 这都是让顾客改变购买想法的重要因素。 现在互联网发达了&#xff0c;很多人在购买产品的…

Typescript再学习-接口interface扩展(5)

接口可以通过extends继承&#xff0c;看代码如下 interface commonPerson {name: string;age: number;sex: string;address: string; }interface Police extends commonPerson {idCard: string;job: string; } let LiHanxing: Police {name: "李汉星",age: 22,sex:…

智慧工地安全生产与风险预警大平台的构建,需要哪些技术?

随着科技的不断发展&#xff0c;智慧工地已成为现代建筑行业的重要发展趋势。智慧工地方案是一种基于先进信息技术的工程管理模式&#xff0c;旨在提高施工效率、降低施工成本、保障施工安全、提升施工质量。一般来说&#xff0c;智慧工地方案的构建&#xff0c;需要通过集成物…

计算机网络:物理层 - 信道极限容量

计算机网络&#xff1a;物理层 - 信道极限容量 实际信道中的数字信号奈式准则香农公式练习 实际信道中的数字信号 信号在传输过程中会受到各种因素的影响&#xff0c;如图所示&#xff1a; 这是一个数字信号&#xff0c;当它通过实际的信道后&#xff0c;波形会产生失真&#…

java中正则表达式第一次特殊使用

记录第一次使用~ 正则表达式的使用 正则表达式&#xff08;Regular Expression&#xff09;是一种用于模式匹配的强大工具&#xff0c;它由普通字符&#xff08;例如字母、数字、符号&#xff09;和特殊字符&#xff08;元字符&#xff09;组成。以下是使用正则表达式的一些…

Flutter 内置按钮介绍及使用

Flutter 提供了多种内置按钮&#xff0c;可以满足不同场景的需求。本文将介绍 Flutter 中常见的按钮类型&#xff0c;以及它们的属性和使用方法。 按钮类型 Flutter 中常见的按钮类型包括&#xff1a; ElevatedButton: 凸起按钮&#xff0c;默认带有阴影和灰色背景。TextBut…

如何使用C语言进行异常处理?C语言中的可变参数函数

一、如何使用C语言进行异常处理&#xff1f; 在C语言中&#xff0c;并没有像C或Java等语言那样内置的异常处理机制。C语言主要依赖于返回值、错误码以及条件编译指令来进行错误处理。然而&#xff0c;你仍然可以通过一些方法模拟异常处理的行为。 一种常见的模拟异常处理的方…

Linux学习:进程(3)与 环境变量

目录 1. 进程的优先级1.1 什么是进程的优先级1.2 优先级的具体表示与查看方式 2. 进程的切换与调度2.1 切换2.2 调度 3. 环境变量3.1 main参数/命令行参数3.2 什么是环境变量3.3 环境变量的使用与特性3.5 本地变量与环境变量的脚本配置文件 1. 进程的优先级 在计算机运行的过程…

stamac Ethernet DTS配置

目录 Demo 配置 compatible reg interrupts & interrupt-names phy-mode phy-handle Snps,reset-gpio

【JavaScript】数组 ② ( JavaScript 数组索引 | JavaScript 遍历数组 | 使用 for 循环遍历数组 )

文章目录 一、JavaScript 数组索引1、数组索引2、数组索引 - 代码示例 二、JavaScript 遍历数组1、使用 for 循环遍历数组2、使用 for 循环遍历数组 - 代码示例 一、JavaScript 数组索引 1、数组索引 在 JavaScript 中 , 数组 的 " 索引 " 又称为 " 下标 "…

将yolov5s部署到安卓上实战经验总结

最近需要在手机端实现一个目标检测的功能&#xff0c;于是选择了小巧又在目标检测方面表现很好的yolov5s&#xff0c;官网下载yolov5代码&#xff0c;用自己做的数据集进行了训练&#xff0c;然后把模型转换成torchscript格式&#xff0c;这些过程网上都有很多讲解&#xff0c;…

电脑突然死机怎么办?

死机是电脑常见的故障问题&#xff0c;尤其是对于老式电脑来说&#xff0c;一言不合电脑画面就静止了&#xff0c;最后只能强制关机重启。那么你一定想知道是什么原因造成的吧&#xff0c;一般散热不良最容易让电脑死机&#xff0c;还有系统故障&#xff0c;比如不小心误删了系…

手机卫星通信

1. 前言 手机卫星通信&#xff0c;顾名思义&#xff0c;就是手机可以与卫星建立通信连接实现数据交互的技术。手机卫星高速数据连接是目前手机通话短信的下一代技术&#xff0c;也是新一代通信生态中的重要组成部分&#xff0c;即非地面网络&#xff08;Non-Terrestrial Networ…