多平台统一管理软件接口,如何实现多平台统一管理软件接口
756
2023-03-05
JavaMailSender实现邮箱验证功能
本文通过javaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法。
使用邮箱注册验证,我们需要理清设计思路:
问题一:注册信息提交后需要对填写的邮箱号发送邮件
问题二:邮件到达时用户如何进行激活,是通过get请求还是获取验证码(本篇使用get接口激活)
问题三:邮件激活如何设置有效时间
通过以上三个问题,博主来帮助大家掌握JavaMailSender邮箱验证
问题一
我首先需要解决如何向指定邮箱号发送邮件
在pom中加入如下依赖:
<dependency>
没错,我们使用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 = "激活"+"
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页面代码:
问题二
如何使用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.randomUUIhttp://D().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实现邮箱注册验证的全部内容,如果大家还有不明白的地方,可以在下方的留言区讨论。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~