Javaweb邮箱验证注册的实现
来源:互联网 发布:疯狂挂机赚钱软件 编辑:程序博客网 时间:2024/04/28 19:59
步骤:
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 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邮箱默认就是打开的。
1 0
- Javaweb邮箱验证注册的实现
- Javaweb邮箱验证注册的实现
- java 实现邮箱验证注册
- 实现邮箱验证用户注册
- app注册短信验证和邮箱验证的技术实现
- Ajax实现注册邮箱的可用性验证-js实现
- 邮箱验证注册的思路
- 用php实现用户的注册并且有邮箱验证
- 用php实现用户的注册并且有邮箱验证
- ECshop中注册时的邮箱验证功能实现代码
- 网站注册时实现邮箱验证的一种方法
- PHP-注册时邮箱验证功能的实现
- 简单好玩的struts2+hibernate实现用户注册邮箱验证
- Django框架下用户注册邮箱验证功能的实现
- 注册页实现激活邮箱验证
- Java实现注册邮箱激活验证
- java web注册实现邮箱验证
- Java注册邮箱激活验证实现代码
- 数据结构之栈
- 容器总结——关联式容器
- POJ1001 Exponentiation
- R-store
- 初学者关于JDK的那点认识
- Javaweb邮箱验证注册的实现
- Excel:日期计算那些事儿
- 2015杭电新生赛1005ACM组队安排【排列组合】【智商题】
- Qt Creator在windows平台下显示中文问题
- startActivityForResult使用简介
- mybatis foreach
- android的适配
- Dropwizard(二) hibernate连接Mysql数据库
- JSP取得绝对路径