SpringBoot实现发送邮件功能

        平时注册或者登录一个网站时,可能收到过邮件用来发送验证码等,邮件在项目中经常会被用到,比如邮件发送通知,比如通过邮件注册,认证,找回密码,系统报警通知,报表信息等。

发送邮件用到了Spring Email的技术,我们这里使用的是SMTP。

1.邮箱打开SMTP服务

找一个邮箱用来给其他邮箱发送文件,要用SMTP服务发送邮件,所以邮箱要提前开启这个功能。

以163邮箱为例:(其他邮箱也是相同的操作)

开启SMTP服务后,会出现弹框,将授权密码记录下来,注意:只出现一次

还可以看到服务器地址 

2.SpringBoot集成Email

将下面的maven配置拷贝下来,集成到SpringBoot中。 

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.1.5.RELEASE</version>
</dependency>

3.邮箱参数配置

首先进行配置文件,配置文件的目的是告诉Spring需要用哪个邮箱来发送邮件

写到SpringBoot的yaml配置文件里面

(登录授权密码不是你邮箱的密码,是你邮箱开启SMTP服务后显示的那个授权密码)

spring:mail:#邮箱域名、端口、邮箱账号、登录授权密码、启用smtps安全协议、采用ssl安全链接host: smtp.163.comport: 465username: ************@163.compassword: ************protocol: smtpsproperties:mail.smtp.ssl.enable: true

4.发送邮件工具类

package com.kyw.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.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;@Component
public class MailClient {private static final Logger logger = LoggerFactory.getLogger(MailClient.class);@Autowiredprivate JavaMailSender mailSender;//读取到配置类中的 “发送者”邮箱@Value("${spring.mail.username}")private String from;/*** 发送邮件* @param to        “接收者”邮箱* @param subject   邮件的主题* @param content   邮件的内容*/public void sendMail(String to, String subject, String content) {try {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);helper.setFrom(from);helper.setTo(to);helper.setText(content,true);//表示可以发送HTML文件helper.setSubject(subject);mailSender.send(helper.getMimeMessage());} catch (MessagingException e) {logger.error("发送邮件失败:" + e.getMessage());}}
}

发送文本邮件测试

写一个测试类来测试,给我的qq邮箱发送一个邮件

package com.kyw;import com.kyw.util.MailClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes  = SpringBootDemoApplication.class)
public class MailTests {@Autowiredprivate MailClient mailClient;@Testpublic void testTextMail() {mailClient.sendMail("2370553834@qq.com","TEST","测试,你好");}
}

收到啦

发送HTML邮件

也是用Thymeleaf实现的,没有配置Thymeleaf先去集成一下,搜索SpringBoot集成Thymeleaf即可。

先写一个邮件模板页面,里面的username是动态的值,等待后端调用的时候填充

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>示例邮件</title>
</head>
<body>
<table cellpadding="0" cellspacing="0" border="0" width="100%" bgcolor="#f2f2f2"><tr><td align="center" style="padding: 20px 0;"><table cellpadding="0" cellspacing="0" border="0" width="600" bgcolor="#ffffff"><tr><td align="center" style="padding: 20px 0;"><img src="https://pic.izihun.com/pic/art_font/2019/01/16/10/png_temp_1570533438378_9814.jpg?imageMogr2/auto-orient/thumbnail/820x/format/jpeg" alt="公司标志"width="150" height="150"></td></tr><tr><td style="padding: 20px;"><h1>欢迎来到我们的邮件示例</h1><p>亲爱的收件人,<span th:text="${username}" ></span> </p><p>这是一个示例邮件的内容。您可以在这里添加任何您想要的信息。</p><p>感谢您的阅读。</p><p>祝您一切顺利!</p></td></tr><tr><td align="center" style="background-color: #f2f2f2; padding: 20px;"><a href="https://www.baidu.com" style="text-decoration: none; background-color: #007BFF; color: #ffffff; padding: 10px 20px; border-radius: 5px; font-weight: bold;">访问我们的网站</a></td></tr></table></td></tr>
</table>
</body>
</html>

后端测试类

package com.kyw;import com.kyw.util.MailClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes  = SpringBootDemoApplication.class)
public class MailTests {@Autowiredprivate MailClient mailClient;/***发送文本文件*/@Testpublic void testTextMail() {mailClient.sendMail("2370553834@qq.com","TEST","测试,你好");}@Autowiredprivate TemplateEngine templateEngine;/***使用Thymeleaf 发送HTML邮件*/@Testpublic void testHtmlMail() {Context context = new Context();context.setVariable("username","张三");String content =  templateEngine.process("/mail/maildemo",context);System.out.println(content);mailClient.sendMail("2370553834@qq.com","TEST",content);}
}

注意路径要按照Thymeleaf的规范来

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

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

相关文章

Vue组件之间传值

聊一聊vue里面组件之间的传值 首先总结一下vue里面传值的几种关系&#xff1a; 如上图所示, A与B、A与C、B与D、C与F组件之间是父子关系&#xff1b; B与C之间是兄弟关系&#xff1b;A与D、A与E之间是隔代关系&#xff1b; D与F是堂兄关系&#xff0c;针对以上关系 我们把组件…

每日一题——下一个排列

下一个排列 题目链接 读懂题目 要理解题目的意思&#xff0c;主要是要读懂这一句&#xff1a;整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。 我们来逐词分析&#xff1a; 其整数&#xff0c;即我们要将这个数组的数字构成一个十进制整数&#xff0c;例如数组…

Qt中布局管理使用总结

目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…

软件测试/测试开发丨Web自动化测试 关键数据记录

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27105 记录关键数据的作用 内容作用日志1、记录代码执行情况&#xff0c;方便复现场景&#xff0c;也可以作为bug依据截图1、断言失败或成功的截图&#…

Yapi接口一键生成Java代码

Yapi上定义好接口之后,转换成Java代码时费时费力,都是重复劳动,毫无意义,所以有了这个工具把程序员从大量重复劳动中解放出来。 1:修改application.properties yapi.project.token=f1a0ea09031f41e1adfa18a 获取方法如下: yapi.api.interface.ids和yapi.api.cat.id只配置…

QT实现TCP通信(服务器与客户端搭建)

一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象&#xff0c;该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态&#xff0c;监听时&#xff0c;可以监听指定的ip地址&#xff0c;也可以监听所有主机地址&#xff0c;可以通过指定端口号&#x…

mysql trace

optimizer_trace 它可以跟踪优化器做出的各种决策&#xff08;比如访问表的方法、各种开销计算、各种转换等&#xff09;&#xff0c;并将跟踪结果记录到 information_schema 数据库中的 optimizer_trace 表中。 mysql 默认是关闭 追踪的 开启、并设置格式为 josn,同时设置trac…

unity 之参数类型之引用类型

文章目录 引用类型引用类型与值类型的差异 引用类型 在Unity中&#xff0c;引用类型是指那些在内存中存储对象引用的数据类型。以下是在Unity中常见的引用类型的介绍&#xff1a; 节点&#xff08;GameObject&#xff09;&#xff1a; 在Unity中&#xff0c;游戏对象&#xff…

手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

文章目录 一、类型&#xff1a;创建型模式1.1 工厂模式1.2 单例模式1.3 建造者模式 二、类型&#xff1a;结构型模式2.1 适配器模式2.2 代理模式2.3 组合模式2.4 装饰器模式 三、类型&#xff1a;行为型模式3.1 模板模式3.2 策略模式3.3 迭代器模式 一、类型&#xff1a;创建型…

机器学习算法详解1:基础知识合集

机器学习算法详解1&#xff1a;基础知识合集 前言 ​ 本系列主要对机器学习上算法的原理进行解读&#xff0c;给大家分享一下我的观点和总结。 本篇前言 ​ 开一个新系列&#xff0c;另外现在开学了&#xff0c;忙起来了&#xff0c;所以更新会很慢。 目录结构 文章目录 机器学…

RS-485/RS-422收发器电路 DP3085 国产低成本替代MAX3085

DP3085是5V、半双工、15kV ESD 保护的 RS-485/RS-422 收发器电路&#xff0c;电路内部包含一路驱动器和一路接收器。 DP3085具有增强的摆率限制&#xff0c;助于降低输出 EMI 以及不匹配的终端连接引起的反射&#xff0c;实现 500kbps 的无误码数据传输。 DP3085芯片接收器输入…

使用Puppeteer进行游戏数据可视化

导语 Puppeteer是一个基于Node.js的库&#xff0c;可以用来控制Chrome或Chromium浏览器&#xff0c;实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化&#xff0c;以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开…