JavaMailSender实现邮箱验证功能
本文通过JavaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法。 使用邮箱注册验证,我们需要理清设计思路: 问题一:注册信息提交后需要对填写的邮箱号发送邮件 问题二:邮件到达时用户如何进行激活,是通过get请求还是获取验证码(本篇使用get接口激活) 问题三:邮件激活如何设置有效时间 通过以上三个问题,博主来帮助大家掌握JavaMailSender邮箱验证 问题一 我首先需要解决如何向指定邮箱号发送邮件 在pom中加入如下依赖: <!--email--> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </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 = "<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邮箱,则修改为: 2.MimeMessageHelper是javax下mail的拓展类,如果你使用spring封装的mail则不需要。如果使用spring的mail,set方法都会不同 3. 4. 到这里为止,邮件已经可以正常发送,为了方便我给出html页面代码: <!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来激活邮件? 问题一中 可以看出 但是这和 从字面意思可以看出,我们这里将会使用一个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的同学估计已经猜到了 只需要在 @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; } 没错,使用 最后,来看下激活邮件吧: 以上就是本次介绍的JavaMailSender实现邮箱注册验证的全部内容,如果大家还有不明白的地方,可以在下方的留言区讨论。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |