Javaweb邮箱验证注册的实现
2016-10-25 22:46
225 查看
步骤:
1.调用后台在数据库里新增用户,(应有三个栏位:激活状态,激活码,有效时间)
DWR前端:userService.register(u,function(){...}) //------------------------------------- public User register(User user) throws AddressException, NoSuchAlgorithmException, MessagingException{ User u = this.loadByEmail(user.getEmail()); //验证数据库是否存在,避免重复邮箱注册 if(u==null) { //MD5密码加密 user.setPassword(SecurityUtil.md5(user.getPassword())); //初始化属性 user.setStatus(0); user.setType("student"); user.setPower(0); user.setLevel(0); //调用发送邮件服务--函数在步骤2 user = MailUtil.activateMail(user); this.add(user); } return u; }
2.发送邮件
public class MailUtil{ public static final String FROM = "zhengzran@163.com";//发件人的email public static final String PWD = "******";//发件人密码--邮箱密码 public static final String URL = "http://localhost:8888/iclass";//项目主页 public static final int TIMELIMIT = 1000*60*60*24; //激活邮件过期时间24小时 public static final String TITLE = "iClass账户激活邮件"; public static final String HOST = "smtp.163.com"; public static final String SMTP = "smtp"; //---------------自定义函数----------------- public static User activateMail(User u) throws AddressException, MessagingException, NoSuchAlgorithmException { //注册邮箱 String to = u.getEmail(); //当前时间戳 Long curTime = System.currentTimeMillis(); //激活的有效时间 Long activateTime = curTime+TIMELIMIT; //激活码--用于激活邮箱账号 String token = to+curTime; u.setToken(SecurityUtil.md5(token)); u.setCreateDate(new Date()); token = u.getToken(); //过期时间 u.setActivateTime(activateTime); //发送的邮箱内容 String content = "<p>您好 O(∩_∩)O~~<br><br>欢迎加入iClass!<br><br>帐户需要激活才能使用,赶紧激活成为iClass正式的一员吧:)<br><br>请在24小时内点击下面的链接立即激活帐户:" +"<br><a href='"+URL+"/activatemail/?token="+token+"&email="+to+"'>" +URL+"/activatemail/?token="+token+"&email="+to+"</a></p>"; //调用发送邮箱服务 MailUtil.sendMail(to, TITLE, content); return u; } //---------------发送邮件------------------- public static void sendMail(String to,String title,String content) throws AddressException, MessagingException { Properties props = new Properties(); //可以加载一个配置文件 // 使用smtp:简单邮件传输协议 props.put("mail.smtp.host", HOST);//存储发送邮件服务器的信息 props.put("mail.smtp.auth", "true");//同时通过验证 Session session = Session.getInstance(props);//根据属性新建一个邮件会话 //session.setDebug(true); //有他会打印一些调试信息。 MimeMessage message = new MimeMessage(session);//由邮件会话新建一个消息对象 message.setFrom(new InternetAddress(FROM));//设置发件人的地址 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//设置收件人,并设置其接收类型为TO message.setSubject(title);//设置标题 //设置信件内容 //message.setText(mailContent); //发送 纯文本 邮件 todo message.setContent(content, "text/html;charset=gbk"); //发送HTML邮件,内容样式比较丰富 message.setSentDate(new Date());//设置发信时间 message.saveChanges();//存储邮件信息 //发送邮件 Transport transport = session.getTransport(SMTP); //Transport transport = session.getTransport(); transport.connect(FROM, PWD); transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址 transport.close(); }
如果前面顺利的话,就会收到如下的激活邮件:
3.激活邮箱账号
//SpringMVC的映射 @RequestMapping("/activatemail") public String hello(HttpServletRequest request,Model model) throws IOException, AddressException, MessagingException, NoSuchAlgorithmException { //获取激活参数 String email = request.getParameter("email"); String token = request.getParameter("token"); Long time = System.currentTimeMillis(); User u = userService.loadByEmail(email); UserDTO ud = new UserDTO(); ud.setMail(email); if(u!=null) { ud.setEmail(1); if(u.getStatus()==0&&u.getActivateTime()!=1) { if(u.getActivateTime()<time) { //过期--激活失败 u.setActivateTime(Long.parseLong("-1")); //重新发送激活邮件 u = MailUtil.activateMail(u); //重新设置了有效时间和token激活码 userService.updateUser(u); ud.setTime(-1); model.addAttribute("user", JsonUtil.toJson(ud)); //resp.getWriter().write(JsonUtil.toJson(u)); } else if (u.getActivateTime()>time){ //在时间内 u.setActivateTime(Long.parseLong("1")); ud.setTime(1); if(u.getToken().equals(token)) { //在时间内且激活码通过,激活成功 u.setStatus(1); u.setCreateDate(new Date()); //重新设置token防止被禁用的用户利用激活 u.setToken(token.replace("1", "c")); u.setType("student"); userService.updateUser(u); ud.setToken(1); ud.setStatus(1); model.addAttribute("user", JsonUtil.toJson(ud)); //resp.getWriter().write(JsonUtil.toJson(u)); } else { //在时间内但是且激活码错误 ud.setToken(-1); model.addAttribute("user", JsonUtil.toJson(ud)); } } //u.getStatus()!=1判断结束 } else if(u.getStatus()==1) { //已经被激活的重复点链接 ud.setStatus(-1); model.addAttribute("user", JsonUtil.toJson(ud)); } //u为空 } else if(u==null) { ud.setEmail(-1); model.addAttribute("user", JsonUtil.toJson(ud)); } return "activatemail"; }基本完成了邮箱验证注册功能,不同的框架可能会有一些差别,但原理基本是一样的,
注意,发送邮箱的账号需要把smtp服务打开,163邮箱默认就是打开的。
相关文章推荐
- Javaweb邮箱验证注册的实现
- Jquery与ajax结合实现验证用户名(邮箱是否)已经被注册过
- java web注册实现邮箱验证
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- 怎么实现邮箱验证注册?
- PHP 实现 注册等的邮箱验证 (二)—— 使用 PHPMailer 发送邮件
- 【验证邮件】怎么实现邮箱验证注册?_验证邮件
- java 实现邮箱验证注册
- [置顶] Java实现注册邮箱激活验证
- Java注册邮箱激活验证实现代码
- asp.net发送邮件,使用MD5加密解密,实现用户注册完成后发送流水号(账号)到对方邮箱,jeasyUI验证,combobox的使用完成 实例下载
- Java注册帐号邮箱激活验证实现
- PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
- Java注册邮箱激活验证实现代码
- PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
- Java注册邮箱激活验证实现代码
- PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
- PHP 实现 注册等的邮箱验证 (一)—— 加密函数 authcode
- Java实现注册邮箱激活验证