邮箱和手机号验证码的发送

一、邮箱验证码

1、随机生成验证码工具类

/*** 随机生成验证码工具类*/
public class ValidateCodeUtils {/*** 随机生成验证码* @param length 长度为4位或者6位* @return*/public static Integer generateValidateCode(int length){Integer code =null;if(length == 4){code = new Random().nextInt(9999);//生成随机数,最大为9999if(code < 1000){code = code + 1000;//保证随机数为4位数字}}else if(length == 6){code = new Random().nextInt(999999);//生成随机数,最大为999999if(code < 100000){code = code + 100000;//保证随机数为6位数字}}else{throw new RuntimeException("只能生成4位或6位数字验证码");}return code;}/*** 随机生成指定长度字符串验证码* @param length 长度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}
}

2、邮箱配置

@Component
@Configuration
public class MailConfig {@Resourceprivate MailProperties mailProperties;public String getFrom() {return mailProperties.getFrom();}public JavaMailSender getMailSender(String username, String password) {JavaMailSenderImpl mailSender = new JavaMailSenderImpl();mailSender.setHost(mailProperties.getHost());mailSender.setPort(mailProperties.getPort());// 如果没有自定义的用户,就使用配置类里面的用户mailSender.setUsername(StringUtils.defaultString(username, mailProperties.getUsername()));mailSender.setPassword(StringUtils.defaultString(password, mailProperties.getPassword()));Properties props = mailSender.getJavaMailProperties();// starttls.enable = true 时为 smtpsprops.put("mail.transport.protocol", "smtps");props.put("mail.smtp.auth", mailProperties.getAuth());props.put("mail.smtp.starttls.enable", mailProperties.getStarttlsEnable());props.put("mail.smtp.ssl.trust", mailProperties.getSslTrust());props.put("mail.debug", "true");return mailSender;}
}

3、发送验证码

public void email(String email) {SimpleMailMessage message = new SimpleMailMessage();//接收者//邮件发送人message.setFrom(mailConfig.getFrom());// 邮件接收人(可以使用 String[] 发送给多个用户)if (StringUtils.isEmpty(email)){throw new ServiceException("指定接收者");}message.setTo(email);// 邮件标题message.setSubject("【phbbb】邮箱验证码");//随机生成6位验证码String code = ValidateCodeUtils.generateValidateCode(6).toString();System.out.println(code);//存储到redis 设置失效时间一分钟redisTemplate.opsForValue().set(CacheConstants.CAPTCHA_CODE_KEY + email,code,120, TimeUnit.SECONDS);// 邮件内容message.setText("修改用户资料的邮箱验证码为:" + code + ",验证码有效期为2分钟!");// 发送邮件mailConfig.getMailSender(null, null).send(message);}

二、短信发送验证码

1、短信发送工具类

/*** 短信发送工具类*/
@Component
public class SMSUtils {/*** 发送短信* @param signName 签名* @param templateCode 模板* @param phoneNumbers 手机号* @param param 参数*/private static final Logger log = LoggerFactory.getLogger(SMSUtils.class);@Value("${sms.accessKeyId}")private static String accessKeyId;@Value("${sms.secret}")private static String secret;@Value("${sms.signName}")private static String signName; // 短信签名@Value("${sms.templateCode}")private static String templateCode;  //短信模板@Value("${sms.regionId}")private static String regionId;   // 短信服务器区域public static void sendMessage(String phone,String code){DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, secret);DefaultAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);//下面两个不能动request.setSysProduct("Dysmsapi");request.setSysDomain("dysmsapi.aliyuncs.com");request.setSysVersion("2017-05-25");request.setSysAction("SendSms");//自定义参数(手机号,验证码,签名,模板)request.putQueryParameter("RegoinId", regionId);request.putQueryParameter("PhoneNumbers", phone);request.putQueryParameter("SignName", signName); //填自己申请的名称request.putQueryParameter("TemplateCode", templateCode);request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");try {CommonResponse response = client.getCommonResponse(request);boolean success = response.getHttpResponse().isSuccess();System.out.println(success + "短信发送成功");}catch (Exception e) {e.printStackTrace();}}
}

2、发送验证码 

@ApiOperation("发送短信验证码")
@PostMapping("/sendSms")
public Result sendSms(String phone) {if(StringUtils.isNotEmpty(phone)){//生成随机的4位验证码String code = ValidateCodeUtils.generateValidateCode(4).toString();//调用阿里云提供的短信服务API完成发送短信SMSUtils.sendMessage(phone,code);//需要将生成的验证码保存到redis,设置失效时间五分钟redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return success("手机验证码短信发送成功");}return error("短信发送失败");
}

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

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

相关文章

【操作系统和计网从入门到深入】(二)进程

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记&#xff0c;所以如果是博主比较熟悉的知识点&#xff0c;博主可能就直接跳过了&#xff0c;但是所有重要的知识点&#xff0c;在这个专栏里面都会提到&#xff01;而且我也一定会保证这个专栏知识点的完整性&…

高通平台开发系列讲解(USB篇)MBIM协议详解

文章目录 一、MBIM协议二、MBIM 消息类型三、基本控制消息构成3.1、MBIM OPEN MSG FORMAT3.2、MBIM CLOSE MSG FORMAT3.3、MBIM_COMMAND_MSG3.4、MBIM_COMMAND_DONE3.5、MBIM_INDICATE_STATUS_MSG四、MBIM Message(UUID+CID)4.1、UUID_BASIC_CONNECT

频率、概率

频率 在相同的条件下进行试验&#xff0c;假设试验进行了次&#xff0c;其中随机事件A发生了次&#xff0c;那么就称为随机事件A发生的频率。 概率 假设随机试验E的样本空间是S&#xff0c;对于其中每个随机事件&#xff0c;都对应了一个实数&#xff0c;把这个实数称为随机…

网络游戏APP备案|游戏

网络游戏APP备案|游戏 网络游戏备案分析需要备案原因&#xff08;个人看法&#xff09;对小公司对大公司 总结 网络游戏备案分析 相信做网络游戏的伙伴们在23年都收到了各个平台的公告&#xff0c;网络游戏需要进行APP的备案。也就是说网路游戏现在安卓平台也不是你想上架测试…

中国降冰片烯行业研究与投资预测报告(2024版)

内容简介&#xff1a; 降冰片烯&#xff08;Norbornene&#xff0c;NB&#xff09;也称降莰烯&#xff08;Norcamphene&#xff09;&#xff0c;是一种桥环烃。降冰片烯是一种常温白色透光的结晶。降冰片烯易升华&#xff0c;沸点96℃&#xff0c;熔点44-46℃&#xff0c;闪点…

酶联免疫抗体试剂——博迈伦生物

酶联免疫抗体试剂是一种广泛应用于生物医学研究领域的实验工具&#xff0c;其在检测、分析和诊断等方面发挥着重要作用。本文将从酶联免疫抗体试剂的基本原理、应用领域、优势特点以及未来发展趋势等方面进行详细阐述。 基本原理 酶联免疫抗体试剂是一种利用酶标记的抗体与特…

a1随笔小思--家书

师夷长技以自强 不应该只学西方的技术&#xff0c;更应该传承我们中华的五千年的先人智慧。 修心养性 藏器于身 子曰:“可与言而不与之言&#xff0c;失人&#xff1b;不可与言而与之言&#xff0c;失言。知者不失人&#xff0c;亦不失言。” 孔子说:“可以跟他交谈&#xf…

051:vue项目webpack打包后查看各个文件大小

第050个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

什么是sql的谓词下推

SQL的谓词下推&#xff08;Predicate Pushdown&#xff09;是一种数据库查询优化技术&#xff0c;它将查询中的过滤条件&#xff08;谓词&#xff09;尽可能地“下推”到查询计划中更早的阶段执行。这意味着&#xff0c;系统尝试在处理和转换数据之前先应用这些过滤条件&#x…

Oracle merge into using on when then 用法

merge into using on when then 是 Oracle 数据库合并数据表的一种操作&#xff0c; MERGE INTO target_table a USING source_table b ON (a.col1 b.col1 and a.col2 b.col2) WHEN MATHED THEN update set a.col3 b.col3 WHEN NOT MATHED THEN insert (a.col1,a.c…

Linux压缩和解压命令

Linux系统中压缩包的后缀有.zip、.gz、.bz2、.xz等&#xff0c;后缀不同表示压缩方式不同。 1.打包命令 tar tar命令用于备份文件的命令&#xff0c;该命令可打包多个文件或目录&#xff0c;也可将被打包的文件与目录从包中还原。 tar 选项 包名 {参数} 包名是指打包的文…

git 分支合并

git 分支合并 比如 20231205 分支合并&#xff0c;到main分支上 1&#xff0c;切换到 main分支上 git checkout main2&#xff0c;进行合并 git merge 202312053&#xff0c;如果您希望在合并时保持提交历史的清晰&#xff0c;您可以使用 rebase 命令&#xff1a; git reba…

javafx-在listview中添加了点击事件后会执行多次

现象 我在一个按钮的点击事件中添加了&#xff0c;点击事件的监听如下&#xff0c;就会造成我多次点击按钮后&#xff0c;里面打开浏览器会执行多次 listviewitemListener new ChangeListener() {Overridepublic void changed(ObservableValue observable, Object oldValue, …

Python基础期末复习 新手

类是创建实例的模板&#xff0c;而实例则是一个一个具体的对象&#xff0c;各个实例拥有的数据都互相独立&#xff0c;互不影响。 实例方法是一个普通的函数&#xff0c;类方法和静态方法都是通过函数装饰器的方式实现的&#xff1b;实例方法需要传入self&#xff0c;类方法需…

git强制回滚,远程强制更新,git pull强制更新

注意&#xff1a;这里是强制回滚&#xff0c;回滚后&#xff0c;之后历史的就没有了&#xff0c;慎用。 本地强制回滚 强制回滚到上一个版本 git reset --hard HEAD^强制回滚上上个版本 git reset --hard HEAD^^git log查看版本 git log --prettyonelinegit log --prettyf…

高通平台开发系列讲解(USB篇)MBIM驱动详解

文章目录 一、数据结构二、源码分析三、adroid_mbim创建四、读写 /dev/adroid_mbim4.1、读gsi_ctrl_dev_read4.2、写gsi_ctrl_dev_write沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB网卡MBIM驱动。 一、数据结构 目录:drivers/usb/gadget/…

【cocotb】【达坦科技DatenLord】Cocotb Workshop分享

https://www.bilibili.com/video/BV19e4y1k7EE/?spm_id_from333.337.search-card.all.click&vd_sourcefd0f4be6d0a5aaa0a79d89604df3154a 方便RFM实现 cocotb_test 替代makefile &#xff0c; 类似python 函数执行

java web系统的常见安全问题

一、背景 java开发的系统在发布到互联网后都需要进行安全扫描&#xff0c;本文主要总结开发web系统需要注意的与系统安全相关的问题。因为在做需求开发时&#xff0c;很少产品会将系统安全的因素考虑在内&#xff0c;总觉得实现个需求很简单&#xff0c;就是一些页面&#xff0…

.Net6.0 Microsoft.AspNetCore.Http.Abstractions 2.20 已弃用

您想要升级 Microsoft.AspNetCore.Http.Abstractions 包&#xff0c;您需要注意以下几点&#xff1a; Microsoft.AspNetCore.Http.Abstractions 包在 ASP.NET Core 2.2 版本后已经被标记为过时&#xff0c;因为它已经被包含在 Microsoft.AspNetCore.App 框架引用中12。因此&am…

零基础自学Python的最全时间规划表

文章目录 前言第一阶段:熟悉Python第二阶段:软件开发第三阶段:成为程序员关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python…