资讯专栏INFORMATION COLUMN

JavaMailSender实现邮箱注册验证

zeyu / 583人阅读

摘要:前言使用邮箱注册验证,我们需要理清设计思路问题一注册信息提交后需要对填写的邮箱号发送邮件问题二邮件到达时用户如何进行激活,是通过请求还是获取验证码本篇使用接口激活问题三邮件激活如何设置有效时间通过以上三个问题,博主来帮助大家掌握邮箱验证问题

前言

使用邮箱注册验证,我们需要理清设计思路:

问题一:注册信息提交后需要对填写的邮箱号发送邮件

问题二:邮件到达时用户如何进行激活,是通过get请求还是获取验证码(本篇使用get接口激活)

问题三:邮件激活如何设置有效时间

通过以上三个问题,博主来帮助大家掌握JavaMailSender邮箱验证

问题一

我首先需要解决如何向指定邮箱号发送邮件

在pom中加入如下依赖:



   javax.mail
   mail
   1.4.7

没错,我们使用javax拓展包下的mail依赖,所以代码中import别选错了

本篇代码一切从简,方便大家读懂
从上到下,我们先看接口:

    @RequestMapping(value = "myajaxRegister")
    @ResponseBody
    public String sendEmail(@RequestParam String email){
        User user = new User("luxiaotao","0331");
        new Thread(){
            @Override
            public void run(){
                emailService.senEmail(user,email);
            }
        }.start();
        return "邮件已发送至您的邮箱,请激活";
    }

因为是测试,所以博主制造了用户的假数据,拿到email才是关键

新建线程来执行邮件发送方法是为了提高用户的体验
试想下如果不为异步,用户需要等待邮件发送完才能跳转页面

来看邮件发送的业务层方法:

    @Override
    public boolean senEmail(User user,String email) {
        try {
            JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
            mailSender.setHost("smtp.163.com");
            mailSender.setUsername("填写自己的163邮箱账号");
            mailSender.setPassword("163邮箱密码");

            MimeMessage mailMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mailMessage,true,"GBK");
            helper.setFrom(mailSender.getUsername());
            helper.setTo(email);
            helper.setSubject("title");
            helper.setText("邮件发送成功");
            String emailToken = getEmailToken(user);
            String url = "激活"+"

如果以上超连接无法访问,请将以下网址复制到浏览器地址栏中

http://localhost:8088/activateMail?emailToken="+emailToken+"

"; helper.setText(url,true); mailSender.send(mailMessage); return true; }catch (Exception e){ e.printStackTrace(); return false; } }

此方法解释:
1.如果你的服务端邮箱是qq邮箱,则修改为:mailSender.setHost("smtp.qq.com");
2.MimeMessageHelper是javax下mail的拓展类,如果你使用spring封装的mail则不需要。如果使用spring的mail,set方法都会不同
3.helper.setText(url,true);的第二个参数true表示当前String是html格式,所以标签都会起作用
4.getEmailToken(user);方法会在下面讲到

到这里为止,邮件已经可以正常发送,为了方便我给出html页面代码:




    
    Title


email
问题二

如何使用get请求的API来激活邮件?
问题一中senEmail()下的getEmailToken(user)正是用来激活的
可以看出senEmail()发送的邮件内容是一个超链接,它就是用来启动我们的激活接口
但是这和getEmailToken(user)又有什么关系呢
从字面意思可以看出,我们这里将会使用一个token

先看激活controller

    @RequestMapping(value = "activateMail")
    public String activateMail(@RequestParam String emailToken){
        if (emailService.balanceToken(emailToken)){
            return "success";
        }
        return "error1";
    }

通过超链接,我们发送一个emailToken参数给服务器
服务器拿到这个token之后,便会和本地的token进行比对,如果相同,则通过验证

这里我使用redis来做缓存,并且以token为key,用户信息(User)为value
来看两个方法:

    @Override
    public String getEmailToken(User user){
        String token = UUID.randomUUID().toString();
        String value = user.toString();
        redisTemplate.opsForValue().set(token,value);
        return token;
    }
    
    @Override
    public boolean balanceToken(String emailToken) {
        if(redisTemplate.opsForValue().get(emailToken)!=null){
            return true;
        }
        return false;
    }

第一个方法使用redis将User信息转换成String并存入内存
第二个方法便是激活验证,通过key(Token)来检查redis中是否有值,成功返回true

问题三

那么如果设置邮箱验证的有效期呢?
讲到这里,经常使用redis的同学估计已经猜到了
只需要在getEmailToken()中加入一行代码即可:

    @Override
    public String getEmailToken(User user){
        String token = UUID.randomUUID().toString();
        String value = user.toString();
        redisTemplate.opsForValue().set(token,value);
        redisTemplate.expire(token,60, TimeUnit.SECONDS);
        return token;
    }

没错,使用redisTemplate.expire()设置当前键值对的过期时间

最后,来看下激活邮件吧:

丑是丑了点,但是好用啊!

以上便是JavaMailSender实现邮箱注册验证
希望能帮助到大家,谢谢大家阅读

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70805.html

相关文章

  • Spring Boot 邮件发送的 5 种姿势!

    摘要:也就是说用户先将邮件投递到腾讯的服务器这个过程就使用了协议,然后腾讯的服务器将邮件投递到网易的服务器这个过程也依然使用了协议,服务器就是用来收邮件。 邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易,本文我们就来一探究竟!看...

    W4n9Hu1 评论0 收藏0
  • Spring Boot 2.x (十八):邮件服务一文打尽

    摘要:前景介绍在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作。 前景介绍 在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作。 大致思路 我们要做的其实就是把Java程序作为一个客户端,然后通过配置SMTP协议去连接我们所使用的发送邮箱(fr...

    idealcn 评论0 收藏0
  • 慕课网_《Spring Boot 发送邮件》学习总结

    摘要:慕课网发送邮件学习总结时间年月日星期六说明本文部分内容均来自慕课网。 慕课网《Spring Boot 发送邮件》学习总结 时间:2018年09月08日星期六 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/ityouknow/... 学习源码:https://github.com/zccoder...

    Meathill 评论0 收藏0
  • 结合Spring发送邮件的四种正确姿势,你知道几种?

    摘要:我拿网易邮箱账号举例子,那么我们如何才能让你的邮箱账号可以利用第三方发送邮件这里的第三方就是我们即将编写的程序。 一 前言 测试所使用的环境 测试使用的环境是企业主流的SSM 框架即 SpringMVC+Spring+Mybatis。为了节省时间,我直接使用的是我上次的SSM项目中整合Echarts开发该项目已经搭建完成的SSM环境。 标题说的四种姿势指的是哪四种姿势? 发送text...

    doodlewind 评论0 收藏0
  • SpringBoot 2.X Kotlin系列之JavaMailSender发送邮件

    摘要:在很多服务中我经常需要用到发送邮件功能,所幸的是可以快速使用的框架,只要引入改框架我们可以快速的完成发送邮件功能。引入获取邮件发送服务器配置在国内用的最多的就是邮件和网易邮件,这里会简单讲解获取两家服务商的发送邮件配置。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 在很多服务中我...

    derek_334892 评论0 收藏0

发表评论

0条评论

zeyu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<