gpt4 book ai didi

JavaMailSender实现邮箱验证功能

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章JavaMailSender实现邮箱验证功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文通过JavaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法.

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

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

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

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

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

问题一 。

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

在pom中加入如下依赖:

?
1
2
3
4
5
6
<!--email-->
< dependency >
   < groupId >javax.mail</ groupId >
   < artifactId >mail</ artifactId >
   < version >1.4.7</ version >
</ dependency >

  。

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

本篇代码一切从简,方便大家读懂 。

从上到下,我们先看接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
@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才是关键 。

新建线程来执行邮件发送方法是为了提高用户的体验 。

试想下如果不为异步,用户需要等待邮件发送完才能跳转页面 。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@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 = "< a href = 'http://localhost:8088/activateMail?emailToken="+emailToken+"' >激活"+"</ a ></ br >< h1 >如果以上超连接无法访问,请将以下网址复制到浏览器地址栏中</ h1 >< h2 >http://localhost:8088/activateMail?emailToken="+emailToken+"</ h2 >";
       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页面代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
< html lang = "en" >
< head >
   < meta charset = "UTF-8" >
   < title >Title</ title >
</ head >
< body >
< form method = "get" action = "/myajaxRegister" >
   email< input type = "text" name = "email" ></ br >
   < input type = "submit" value = "register" >
</ form >
</ body >
</ html >

问题二 。

如何使用get请求的API来激活邮件?

问题一中senEmail()下的getEmailToken(user)正是用来激活的 。

可以看出senEmail()发送的邮件内容是一个超链接,它就是用来启动我们的激活接口 。

但是这和getEmailToken(user)又有什么关系呢 。

从字面意思可以看出,我们这里将会使用一个token 。

先看激活controller 。

?
1
2
3
4
5
6
7
@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 。

来看两个方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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()中加入一行代码即可:

?
1
2
3
4
5
6
7
8
@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实现邮箱验证功能

以上就是本次介绍的JavaMailSender实现邮箱注册验证的全部内容,如果大家还有不明白的地方,可以在下方的留言区讨论.

原文链接:https://segmentfault.com/a/1190000012433867 。

最后此篇关于JavaMailSender实现邮箱验证功能的文章就讲到这里了,如果你想了解更多关于JavaMailSender实现邮箱验证功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com