当前位置: 首页 > news >正文

实现qq邮箱发送验证码登录

实现qq邮箱发送验证码登录

一、前提准备(获取授权码)

打开qq邮箱,选择账号与安全

选择安全设置,设置打开POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击获取授权码,之后按照要求验证获取即可。

二、需要的依赖和配置

除了正常的数据库连接依赖、MyBatis Plus和redis依赖以外还需要spring boot 内置的邮件依赖:

<!-- 邮件 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置需要的配置:

mail:host: smtp.qq.comport: 465username: (你的qq邮箱)password:  (你的授权码)protocol: smtpsproperties:mail.smtp.auth: truemail.smtp.ssl.enable: truedata:redis:host: localhostport: 6379

    三、邮件的工具类

    创建MailUtil 工具类

    @Component
    public class MailUtil {@Autowiredprivate JavaMailSender mailSender;
    // 发送邮件public void sendMail(String to, String subject, String text) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("(你的qq邮箱)");message.setTo(to);message.setSubject(subject);message.setText(text);mailSender.send(message);}
    }

    四、创建控制类、服务类、mapper

    为了考虑到效率,这里用到了redis 临时存储钥匙:

    控制器:

    @GetMapping("/sendCode")
    public String sendCode(@RequestParam String email) {String key = "login:code:" + email;String cooldownKey = "login:cooldown:" + email;// 生成验证码String code = String.valueOf(100000 + new Random().nextInt(900000));if (Boolean.TRUE.equals(redisTemplate.hasKey(cooldownKey))) {return "发送过于频繁,请稍后再试。";}// 检查 Redis 中是否已有未过期验证码if (Boolean.TRUE.equals(redisTemplate.hasKey(key))) {return "验证码未过期,请检查您的邮箱。";}redisTemplate.opsForValue().set(cooldownKey, "1", 60, TimeUnit.SECONDS);try {// 发送邮件mailUtil.sendMail(email, "登录验证码", "您的验证码是:" + code + ",5分钟内有效。");// 邮件发送成功后再写入 RedisredisTemplate.opsForValue().set(key, code, 5, TimeUnit.MINUTES);} catch (Exception e) {e.printStackTrace();return "邮件发送失败,请稍后重试。";}return "验证码已发送到 " + email;
    }@PostMapping("/login")
    public String login(@RequestParam String email, @RequestParam String code) {String redisCode = redisTemplate.opsForValue().get("login:code:" + email);if (redisCode == null) {return "验证码已过期";}if (!redisCode.equals(code)) {return "验证码错误";}User user = userService.getOrCreateByEmail(email);redisTemplate.delete("login:code:" + email);return "登录成功,欢迎 " + user.getNickname();
    }

    Mapper

    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    }

    服务类:

    public interface UserService extends IService<User> {User getOrCreateByEmail(String email);
    }
    
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic User getOrCreateByEmail(String email) {User user = getOne(new QueryWrapper<User>().eq("email", email));if (user == null) {user = new User();user.setEmail(email);user.setNickname("用户" + email.substring(0, email.indexOf('@')));user.setStatus(1);user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());save(user);}return user;}
    }

    实体类:

    @Data
    @TableName("user")
    public class User {@TableId(type = IdType.AUTO)private Long id;private String email;private String nickname;private String avatar;private Integer status;private LocalDateTime createTime;private LocalDateTime updateTime;
    }

    自然也需要创建相应的表用来持久化存储、jwt token验证等等,,不过,这里我们只将如何实现关联qq邮箱的逻辑。。就不多说了。

    五、试验

    启动redis 与项目,

    在浏览器中请求

    http://localhost:9060/login/sendCode?email=你要发送邮件的qq号

    查看邮箱的验证码:

    比如我这里是  939544

    任意一个api测试工具,postman什么都可以,我这里是apipost:

    http://localhost:9060/login/login?email=你的邮箱&code=939544

    发送post请求,可以看到登录成功:

    六、自定义邮件样式

    有时候大家会看到一些有着自定义布局的邮件,比如:

    那么如何实现这样的效果呢?

    大家可以看看我的另一篇文章邮件登录之自定义邮件-CSDN博客

    http://www.dtcms.com/a/562423.html

    相关文章:

  • 泰安集团网站建设方案南宁百度关键词排名公司
  • 链家在线网站是哪个公司做的网络营销课程培训课程
  • PostgreSQL 16 性能调优指南
  • 杭州群游科技网站做的魔域网站app的区别是什么意思
  • 网站开发质保金百度推广后台登陆首页
  • 做网站的s标的软件网站建设费用计入什么科目
  • 跟der包学习java_day2「变量和数据类型」
  • 58同城临沂网站建设企业形象网站解决方案
  • 门户网站建设需注意的问题网站建设环境搭建心得体会
  • wordpress建站比较南阳新闻最新消息
  • 河南省工程建设信息官方网站可以自己做网站优化吗
  • 网站建设功能套餐表软件行业发展前景
  • 【快速解决】idea运行javafx错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  • 北京企业建站公司南山网站 建设seo信科
  • idc 公司网站模板网站建设的具体任务有哪些
  • large-scale-DRL-exploration 代码阅读(五)
  • 亚马逊网站的建设目标网站建设方案及
  • C 标准库 - `<stdarg.h>`
  • 顺德网站制作公司汕头市住房和城乡建设局网站
  • 南宁网站建设公司怎么接单kingcms 暂未创建网站首页
  • 010网站建设郑州网站建设找哪家好
  • 【QT】安装包
  • 网站建设课程的感想彩票网站开发软件
  • 网软志成免费部队网站源码下载网站建设后台实训体会
  • 自适应网站如何做移动适配衡水做网站建设
  • 【软考架构】案例分析-云侧AI与端侧AI
  • 三.Docker镜像及其私有库
  • 网站建设国内外研究现状模板长沙百度网站推广优化
  • 开展建设文明网站活动网络营销专业怎么样
  • 云南省网站开发软件WordPress连接微博