在网站及各种应用中不可避免的需要运用到邮件发送服务,如消息提醒,验证码的发送,都需要使用到邮件发送。大体思路:先生成一个六位随机验证码并存起来,调用邮箱接口发送验证码,将用户输入的验证码和之前保存的验证码进行比对。
那么在SpringBoot中如何实现邮箱验证码的发送验证,以下面一个代码实例来展示下如何在SpringBoot框架下实现邮件消息发送。
第一步:开启SMTP服务(简单邮件传输协议)
大家可以根据自己的习惯选择qq邮箱或者163邮箱等,大致方法都差不多,开通SMTP服务生成一个密码即可,但是不同的邮箱配置参数会有所不同,此处以qq邮箱为例。
第二步:在项目中导入相关依赖
org.springframework.boot
spring-boot-starter-mail
第三步:在配置文件里进行相关配置
spring:
#邮箱验证码配置
mail:
#smtp服务主机 qq邮箱则为smtp.qq.com;163邮箱是smtp.163.com
host: smtp.qq.com
#服务协议
protocol: smtp
# 编码集
default-encoding: UTF-8
#发送邮件的账户
username: panmourenseo@qq.com
#授权码
password: sjsjxushsh
test-connection: true
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
第四步:设计生成6位随机数的静态方法
package com.healthMgr.common.email;
import java.security.SecureRandom;
import java.util.Random;
public class VerCodeGenerateUtil {
//验证码包含的字段
private static final String SYMBOLS = "panmourenseo";
private static final Random RANDOM = new SecureRandom();
//生成六位数的随机数字
public static final String generateVerCode(){
//如果是六位,就生成大小为 6 的数组
char [] numbers = new char[6];
for (int i=0;i
第五步:设计一个静态类,实现一个验证码对应一个用户和验证码一个小时有效
package com.healthMgr.common.email;
import java.util.Date;
import java.util.HashMap;
public class TimeAndVerCode {
//存入当前时间,在验证时拿取,若验证的时间减去当前时间大于3600000ms则失效;
public static HashMap currentTimeMap = new HashMap<>();
//通过邮箱key对应一个验证码valus,在验证时从静态nap获取进行验证
public static HashMap verCodeMap = new HashMap<>();
}
第六步:设计发送邮件的类
package com.healthMgr.common.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component //将当前类放入组件中,从而能够实现自动注入
public class SendEmail {
//引入邮件接口
@Autowired
private JavaMailSender mailSender;
public void sendEmail(String toEmail){
String from = "panmourenseo@qq.com";
//创建邮件
SimpleMailMessage message = new SimpleMailMessage();
//设置发件人信息
message.setFrom(from);
//发给谁
message.setTo(toEmail);
message.setSubject("您本次的验证码是");
//生成六位随机验证码
String verCode = VerCodeGenerateUtil.generateVerCode();
TimeAndVerCode.verCodeMap.put(toEmail,verCode);
System.out.println(verCode);
//获得当前时间
//TimeAndVerCode.currentTime = new Date();
TimeAndVerCode.currentTimeMap.put(toEmail,new Date());
message.setText("尊敬的用户,您好:\n"
+ "\n本次请求的邮件验证码为:" + verCode + ",本验证码 1 分钟内效,请及时输入。(请勿泄露此验证码)\n"
+ "\n如非本人操作,请忽略该邮件。\n(这是一封通过自动发送的邮件,请不要直接回复)");
mailSender.send(message);
}
}
第七步:测试发送邮箱的功能
package com.healthMgr;
import com.healthMgr.common.email.SendEmail;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import java.util.HashMap;
@SpringBootTest
public class email {
@Autowired //从容器中自动注入
private SendEmail sendEmail;
@Test
void sendEmail(){
sendEmail.sendEmail("chateach.com@163.com");
}
}
相关文章
-
linux环境如何搭建java框架springboot,为大家演示一种快速简单的搭建springboot的方法。由于springboot是java的众多框架之一,因此需要部署好java的运行环境,即服务器安装好jdk18以及tomcat3,注意版本的兼容性。
-
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成。
-
Spring HtmlUtils把HTML编码转义,可将HTML标签互相转义,HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用。
-
SpringBoot中的异常处理的详细教程,处理用户请求出现运行时异常时直接响应给用户的是一个错误界面,对于用户的使用体验不友好。什么是全局异常处理机制,用来解决整个系统中任意一个控制器抛出异常时的统一处理入口,如何使用全局异常处理类 implements HandlerExceptionResolver,之后重写接口中的resolveException方法。
-
我们的项目通常来讲都是一个比较大的项目,包含了各种各样的服务。如果每个服务都以不同的方式返回异常信息,这样排查的时候就会比较凌乱。如果我们定义一个标准的异常处理体系。并在所有的服务中使用。那样开发起来就可以快速定位。页面也会更加的简单和直观。
-
Springboot如何生成cookie,获取cookie信息,cookie就是一个小体积的键值对,格式:key=value;客户端和服务器端,通常使用http协议来进行数据传输,而http协议是无状态的。也就是客户端向同一个服务器端发送的第一次Request和第二次Request,是没有关联的。需要cookie来保存一些用户信息,每次向相同的域名(domian)和路径(path)发送Request时都会携带cookie。
-
SpringBoot——Thymeleaf中的条件判断(th:if、th:unless、th:switch、th:case),th:if、th:unless、th:switch、th:case 这几个属性,其实和JSP里面的那些标签都是类似的,含义就可以理解为Java语言中的if、else、switch-case这些条件判断一样,所以这里就不再详细叙述了,下面就直接给出例子!!!
-
Thymeleaf作为众多模板引擎中的一种,我最初也是对它充满了陌生,在SpringBoot如何处理时间格式,SpringBoot--Thymeleaf日期格式处理。
-
SpringBoot 如何解决跨域问题方法,CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问的那个资源就会遇到跨域问题。
-
springboot,java如何获取用户的真实ip地址呢?项目开发中,不管是什么应用不管是什么语言,获取ip地址是非常关键的一环,因为管是操作日志的记录还是业务的需求上都不可或缺的用到访客的ip地址,那么在java中如何获取到IP地址呢?
-
linux系统下使用Vue CLI脚手架安装vue3。Vue 提供了一个官方的 CLI,为单页面应用 (SPA) 快速搭建繁杂的脚手架。它为现代前。端工作流提供了功能齐备的构建设置。
-
如果你喜欢记录生活,那么拥有一个个人的博客网站还是非常不错的,从此你不再需要遵守任何平台的规则,只需要遵守我国法律即可。人生在世短短几十年,为短暂的人生留下点痕迹,成为数字世界的终极身份证。今天潘某人SEO就为大家大致的总结一下拥有一个自己网站需要哪几步并需要多少花费。
-
php下如何测试MYSQL数据库是否连接正常。分享一个快速检测数据库连接正确的方法,选择一张有数据的表,打印其中的一个参数。能够正常的输入数据库数据那么链接觉得没有问题。
-
vue框架简介及其优势,Vue 是一套用于构建用户界面的渐进式JavaScript框架,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。。但是vue对于SEO并不是非常友好,及其解决方案。
-
服务器如何修改默认的ssh端口,修改ssh默认端口是非常有必要的可以保证登陆的安全性。
-
indexOf()是js中内置的方法之一,它的功能大家都很熟悉:简单来说就是得到数据的索引,对于正则不熟练的人,是个很不错的方法。string中indexOf() 会将数值参数转换为字符再查询索引;number类型没有IndexOf() 可以转换为字符再使用;array中indexOf() 是严格比较
-
js中的数组元素的添加方法,主要有三种方法,用索引元素添加、push( )方法、unshift()方法,push()方法在数组的尾部添加一个或多个元素,并返回数组新的长度,修改并替换了原始数组而非生成一个修改版的新数组。
-
分享一个基于原生javascript语法不需要任何插件来实现进度条的真实加载,按照加载资源数量的控制进度条的变化,可以实现只要网站每加载完成一个资源进度条同步变化。给站点一个真实的进度条对于用户体验还是非常友好的,一个真实的进度条可以一定程度上可以增加用户继续等待的机率。
-- 这已经是底线了,看看别的把! --