SpringBoot实现邮箱验证码

自行创建一个SpringBoot项目

导入SpringBoot所需要的邮箱验证码的包

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

定义邮箱验证码所需要的配置

找到application.properties然后将下面的配置输入进去

接下来用户的账号是需要填充你自己的qq邮箱号
password填充的是你的邮箱配置生成的授权码,具体授权码应该如何生成,请看下面的详细配置   --------------------------------邮箱授权码配置下方有详细教程,请仔细观看

#发送邮件配置相关
# 配置邮件服务器的地址 smtp.qq.com
spring.mail.host=smtp.qq.com
# 配置邮件服务器的端口(465或587)
spring.mail.port=465
# 配置用户的账号
spring.mail.username=XXX
# 配置用户的密码
spring.mail.password=XXX
# 配置默认编码
spring.mail.default-encoding=UTF-8

邮箱授权码配置

  1. 登录邮箱
  2. 点击获取授权码,进入之后,接下来的步骤你应该一看就懂了

接下来开始写代码

创建AppConfig文件,目的是为了找到发送方的qq邮箱,也就是之前在配置文件里面配置的

package com.easypan.entity.config;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("appConfig")
public class AppConfig {
    @Value("${spring.mail.username}")
    private String sendUsername;
    public String getSendUsername() {
        return sendUsername;
    }
}
    //导入bean
	@Resource
	private JavaMailSender javaMailSender;


	@Resource
	private AppConfig appConfig;
/**
	 * 发送邮箱验证码的功能
	 * @param toEmail
	 * @param code
	 */
	private void sendEmailCode(String toEmail,String code){
		try {
			MimeMessage message = javaMailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message,true);
			helper.setFrom(appConfig.getSendUsername());
			helper.setTo(toEmail);
			helper.setSubject("你的项目发送的主标题");
			helper.setText("<div style=\"background-color: #f0f0f0; padding: 20px;\">\n" +
					"    <h1 style=\"color: #800000;\">你的项目名称</h1>\n" +
					"    <p style=\"color: #800000;\">尊敬的用户,您的短信验证码为:<span style=\"color: black; font-weight: bold;\">"+code+"</span></p>\n" +
					"    <p style=\"color: #800000;\">该验证码用于注册账号或者修改密码,有效期为5分钟。</p>\n" +
					"    <p style=\"color: #800000;\">请勿泄露和转发此验证码,以保障您的账号安全。</p>\n" +
					"    <p style=\"color: #800000;\">如非您本人操作,请忽略此邮件。</p>\n" +
					"</div></p>");
			helper.setSentDate(new Date());
			javaMailSender.send(message);
		} catch (MessagingException e) {
			logger.error("邮件发送失败");
			throw new BusinessException("邮件发送失败");
		}
	}

接下来验证码发送成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MCS-51伪指令

上篇我们讲了汇编指令格式&#xff0c;寻址方式和指令系统分类&#xff0c;这篇我们讲一下单片机伪指令。 伪指令是汇编程序中用于指示汇编程序如何对源程序进行汇编的指令。伪指令不同于指令&#xff0c;在汇编时并不翻译成机器代码&#xff0c;只是会汇编过程进行相应的控制…

java继承使用细节二

构造器 主类是无参构造器时会默认调用 public graduate() {// TODO Auto-generated constructor stub也就是说我这里要用构造器会直接调用父类。它是默认看不到的 &#xff0c;System.out.println("graduate");} 但当主类是有参构造器如 public father_(int s,doubl…

考研计组chap1计算机系统概述

目录 一、计算机发展历程(不考了) 二、计算机硬件的基本组成 3 1.五个部分 &#xff08;1&#xff09;输入设备 &#xff08;2&#xff09;控制器 &#xff08;3&#xff09;运算器 &#xff08;4&#xff09;&#xff08;主&#xff09;存储器 &#xff08;5&#xff0…

Python高效数据分析的综合复习指南【时间处理与机器学习】

五、时间处理 一、时间戳-----Timestamp类型 方法1&#xff1a;使用Timestamp创建 pandas.Timestamp(ts_input, freqNone, tzNone, unitNone, yearNone, monthNone, dayNone, hourNone, minuteNone, secondNone, microsecondNone, tzinfoNone, offsetNone) import pandas a…

微信好友这样打标签更高效!

为什么要做标签管理? ① 通过标签管理&#xff0c;可以清晰的知道每个私域好友的关系程度&#xff0c;如哪些是忠诚客户&#xff0c;哪些是意向客户&#xff0c;哪些是刚加上的客户等等。 这样就知道下一步要怎么操作&#xff0c;做到精细化运营。如忠诚客户跟进维护&#x…

子分支想主分支发起合并请求

请求合并 1.点击 git Web 页右上角打开 Merge requests 进入新页&#xff0c;点击右上角。注意选择要合并的项目 2.左边是源分支&#xff0c;右边是要合并的目标分支。 3.最后点击左下角绿色按钮 4.第一个红框 Assignee&#xff0c;选择要通知去合并的人。第二个红框不动&#…

qt5core.dll怎么下载,qt5core.dll下载安装详细教程

不知道大家有没有遇到过qt5core.dll丢失这个问题&#xff1f;目前这个问题还是比较常见的&#xff0c;一般使用电脑比较多的的人&#xff0c;有很大几率遇到这种qt5core.dll丢失的问题。今天主要针对这个问题&#xff0c;来给大家讲解一下一键修复qt5core.dll的方法。 Qt5Core.…

基于FPGA的函数信号发生器设计

本科时期的一个课设&#xff0c;现在将他分享出来&#xff0c;写了很详细的文章&#xff0c;可以直接拿去使用&#xff1a;设计采用波形查找表和相位累加器的方法实现DDS&#xff0c;查找表的数据位宽为8位&#xff0c;采样点数为4096。波形产生范围是100Hz-20MHz&#xff0c;最…

前端 CSS 经典:SVG 描边动画

1. 原理 使用 css 中的 stroke 属性&#xff0c;用来描述描边的样式&#xff0c;其中重要的属性 stroke-dasharray、stroke-dashoffset。理解了这两个属性的原理&#xff0c;才能理解描边动画实现的原理。 stroke-dasharray&#xff1a;将描边线变成虚线、其中实线和虚线部分…

年轻人逆转生活方式,胰岛功能关键在于饮食与运动的配合!

平常在生活方面&#xff0c;控制好饮食和运动&#xff0c;但是有的年轻人&#xff0c;比如说工作原因&#xff0c;或者是个人喜好等原因&#xff0c;可能饮食他配合不了&#xff0c;这样逆转起来也很困难。 有一个例子&#xff0c;就是那种公交车司机&#xff0c;他的排班就是夜…

C++容器之无序多集(std::unordered_multiset)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 find3.6 count3.7 equal_range3.8 emplace3.9 emplace_hint3.10 insert3.11 erase3.12 clear3.13 swap3.14 bucket_count3.15 max_bucket_count3.16 bucket_size3.17 bucket3.18 load_fa…

【正点原子Linux连载】 第四十七章 音频驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

llama3-8b-instruct-262k微调过程的问题笔记(场景为llama论文审稿)

目录 一、环境配置 1.1、模型 1.2、微调环境 1.3、微调数据 二、发现的问题 2.1、过拟合问题 2.2、Qlora zero3 保存模型时OOM问题(已解决) 一、环境配置 1.1、模型 llama3-8b-instruct-262k &#xff08;英文&#xff09; 1.2、微调环境 Package Version ------------------…

安全态势管理的六大挑战:态势感知

德迅云安全鉴于如今的安全威胁不断变幻&#xff0c;企业对实施态势管理策略至关重要&#xff0c;可以让安全团队根据需要进行安全策略的动态调整。如果企业在研究构建态势感知管理&#xff0c;需要特别关注以下六个方面的挑战。 如果企业正在使用一个或多个平台&#xff0c;那么…

stm32常用编写C语言基础知识,条件编译,结构体等

位操作 宏定义#define 带参数的宏定义 条件编译 下面是头文件中常见的编译语句&#xff0c;其中_LED_H可以认为是一个编译段的名字。 下面代码表示满足某个条件&#xff0c;进行包含头文件的编译&#xff0c;SYSTEM_SUPPORT_OS可能是条件&#xff0c;当非0时&#xff0c;可以…

小程序-购物车-基于SKU电商规格组件实现

SKU 概念&#xff1a; 存货单位&#xff08; Stock Keeping Unit &#xff09;&#xff0c; 库存 管理的最小可用单元&#xff0c;通常称为“单品”。 SKU 常见于电商领域&#xff0c;对于前端工程师而言&#xff0c;更多关注 SKU 算法 &#xff0c;基于后端的 SKU 数据…

总结 HTTPS 的加密流程

一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL&#xff0c;在HTTP/2中TCP三次握手后会进入SSL/TSL握手&#xff0c;当SSL/TSL建立链接后&#xff0c;才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥&#xff1a; 密钥是用于加密和解密数据…

VMware安装保姆教程、Docker安装/依赖安装缓慢等问题

常见问题前置: 1、docker依赖安装缓慢,没有走设置的资源库:解决安装docker-ce过慢 Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds‘) 在添加阿里云镜像后安装依旧慢: yum-config-manager --add-repo http://mirrors.aliyun.com/docker…

JavaSE--基础语法(第一期)

Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义。不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境&#xff0c;并广泛应用于嵌入式系统…

鸿蒙HarmonyOS开发:tabs结合tabContent实现底部tabBar导航栏页面布局

文章目录 一、组件介绍1、Tabs参数属性事件TabsController 2、子组件属性说明 二、基础示例1、基础顶部导航2、效果3、可以滚动导航栏2、效果 三、扩展示例自定义导航栏1、代码2、效果 一、组件介绍 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。Tab…