springboot实现用邮箱发送验证码

SpringBoot实现邮箱验证码

在B站找到一个springboot项目进行学习时,里面用的是阿里云短信进行发送邮件,但是个人使用阿里云短信比较麻烦,于是想到可不可以使用邮箱来完成发送验证码的操作。事实证明是可行的

第一步

引入相关依赖

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

第二步

在application.yml文件中写入相关的配置,这边我使用的qq邮箱

  mail:
    host: smtp.qq.com
    username: qq邮箱地址
    password: 授权码
    default-encoding: utf-8
    port: 587

其中授权码,需要在qq邮箱设置 – 账户中,开启POP3/SMTP服务,然后就能获得授权码

第三步

在Java代码中实现方法(因为是个人练习的代码,写的比较乱,大佬可以在基础上改改)

public R<String> sendMsg(@RequestBody User user, HttpSession session){
        String phone = user.getPhone();
        try {
            log.info(user.toString());
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
            messageHelper.setFrom("设置发件qq邮箱");
            messageHelper.setTo("接送方的邮箱地址");//这边填的是发送发的地址,需要写全地址
            messageHelper.setFrom("发送方的地址,其实就是我的地址");//这边我填的是qq邮箱地址
            messageHelper.setSubject("验证码");//邮件名字
            String code = xxx;//使用方法生成一个验证码
            messageHelper.setText("尊敬的用户,您好:\n本次请求的邮件验证码为:" + code);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return R.success("发送成功");
    }

结果

在这里插入图片描述

后续

由于邮箱的响应时间比较长,在前后端交互的时候,可能会出现响应超时的问题,可以改下js中的timeout参数

function sendMsgApi(data) {
    return $axios({
        timeout: 6*60*1000, //响应时间
        'url': '/user/sendMsg',
        'method': 'post',
        data
})

其余建议

  • 其实不应该把处理写在controller层,并且其中接受方的地址应该以参数的形式传入,不能写死,例子中只是为了演示,大家可以后续对方法进行修改
  • 在学习的时候,视频中是将code放入session中,之后再取出进行校验,其实可以放入redis中

Springboot框架初学者,还请各位大佬指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值