邮箱验证步骤
本文使用了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自己想)
- @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;
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |