前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现邮箱发送验证码功能

实现邮箱发送验证码功能

作者头像
不吃紫菜
发布2022-08-18 15:16:23
2.4K0
发布2022-08-18 15:16:23
举报
文章被收录于专栏:每日一Java,进步一点点

邮箱验证步骤

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

导入依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

application.yaml

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

代码语言:javascript
复制
spring:
  mail:
  	# 163邮箱的地址为smtp.163.com,直接填写即可
    host: smtp.163.com
    # 你申请的163邮箱
    username: xxxxxx@163.com
    # 注意密码是在开启smtp/pop3时自动生成的,不是邮箱密码,记得保存一下,不然就找不到了
    password: xxxxxxxxxxx
放入静态资源,创建相应的controller

此处省略一万字~~~

编写service接口,以及其实现类(接口和controller自己想)
代码语言:javascript
复制
@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;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 邮箱验证步骤
    • 导入依赖
      • application.yaml
        • 放入静态资源,创建相应的controller
        • 编写service接口,以及其实现类(接口和controller自己想)
    相关产品与服务
    验证码
    腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档