实现邮箱发送验证码功能

邮箱验证步骤

本文使用了redis数据库做验证码的缓存,不想用redis数据库也可以直接将验证码放入mysql中,设置验证码有效期即可。

导入依赖

copy
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>

application.yaml

【用yaml在后面注入JavaMailSender的bean时会爆红但不会影响运行,因为JavaMailSenderImpl在初始加载时是要读取properties,不读取yaml,但运行后就会读取了】

copy
spring: mail: # 163邮箱的地址为smtp.163.com,直接填写即可 host: smtp.163.com # 你申请的163邮箱 username: xxxxxx@163.com # 注意密码是在开启smtp/pop3时自动生成的,不是邮箱密码,记得保存一下,不然就找不到了 password: xxxxxxxxxxx

放入静态资源,创建相应的controller

此处省略一万字~~~

编写service接口,以及其实现类(接口和controller自己想)

copy
@Service public class VerifyServiceImpl implements VerifyService { @Resource JavaMailSender sender; //一个用于发送邮箱的类 @Resource StringRedisTemplate template; //用于Redis数据库操作 @Value("${spring.mail.username}") String email; @Override public void sendVerifyCode(String mail) { SimpleMailMessage message = new SimpleMailMessage(); //邮件标题 message.setSubject("【xxx网站】您的注册码"); //设置随机数作为验证码 Random random = new Random(); int code = random.nextInt(89999) + 10000;//小心机 //用redis保存验证码 //提前验证一下,如果发送了多次则删除上一次的验证码,保留最新的验证码 if (template.opsForValue().get("verify:code:"+mail)!=null){ template.delete("verify:code:"+mail); } template.opsForValue().set("verify:code:"+mail,code+"",5, TimeUnit.MINUTES);//设置五分钟过期时间 //邮件内容 message.setText("您的验证码是:"+code+",五分钟有效,请及时完成注册。若不是本人操作请忽略"); message.setFrom(email); //谁发送,必须和yaml文件中的账号一致 message.setTo(mail); //谁接收 sender.send(message); } @Override public boolean doVerify(String mail, String code) { String string = template.opsForValue().get("verify:code:"+mail); if (string.equals(code)){ template.delete("verify:code:"+mail); return true; } return false; } }
posted @   不吃紫菜  阅读(1066)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起