实现邮箱发送验证码功能
实现邮箱发送验证码功能
邮箱验证步骤
本文使用了redis数据库做验证码的缓存,不想用redis数据库也可以直接将验证码放入mysql中,设置验证码有效期即可。
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yaml
【用yaml在后面注入JavaMailSender的bean时会爆红但不会影响运行,因为JavaMailSenderImpl在初始加载时是要读取properties,不读取yaml,但运行后就会读取了】
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;
}
}
本文来自博客园,作者:不吃紫菜,遵循CC 4.0 BY-SA版权协议,
转载请附上原文出处链接:https://www.cnblogs.com/buchizicai/p/16517289.html及本声明;
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
漫思
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
2019-01-01 canves绘制北京地铁线路图,包括线路绘制,优先路线,单路径选择。
2019-01-01 新年第一个目标一张表盘串讲所有canves的知识点