Java 注册时发送激活邮件和激活的实现示例
Java注册时发送激活邮件和激活的实现示例
最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用
1.RegisterController.java
packagecom.app.web.controller; importjava.text.ParseException; importjavax.annotation.Resource; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; importorg.springframework.web.servlet.ModelAndView; importcom.app.service.impl.RegisterValidateService; importcom.app.tools.ServiceException; @Controller publicclassRegisterController{ @Resource privateRegisterValidateServiceservice; @RequestMapping(value="/user/register",method={RequestMethod.GET,RequestMethod.POST}) publicModelAndViewload(HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException{ Stringaction=request.getParameter("action"); ModelAndViewmav=newModelAndView(); if("register".equals(action)){ //注册 Stringemail=request.getParameter("email"); service.processregister(email);//发邮箱激活 mav.addObject("text","注册成功"); mav.setViewName("register/register_success"); } elseif("activate".equals(action)){ //激活 Stringemail=request.getParameter("email");//获取email StringvalidateCode=request.getParameter("validateCode");//激活码 try{ service.processActivate(email,validateCode);//调用激活方法 mav.setViewName("register/activate_success"); }catch(ServiceExceptione){ request.setAttribute("message",e.getMessage()); mav.setViewName("register/activate_failure"); } } returnmav; } }
2.RegisterValidateService.java
packagecom.app.service.impl; importjava.text.ParseException; importjava.util.Date; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service; importcom.app.dao.UserDao; importcom.app.tools.MD5Tool; importcom.app.tools.MD5Util; importcom.app.tools.SendEmail; importcom.app.tools.ServiceException; importcom.code.model.UserModel; @Service publicclassRegisterValidateService{ @Autowired privateUserDaouserDao; /** *处理注册 */ publicvoidprocessregister(Stringemail){ UserModeluser=newUserModel(); Longas=5480l; user.setId(as); user.setName("xiaoming"); user.setPassword("324545"); user.setEmail(email); user.setRegisterTime(newDate()); user.setStatus(0); ///如果处于安全,可以将激活码处理的更复杂点,这里我稍做简单处理 //user.setValidateCode(MD5Tool.MD5Encrypt(email)); user.setValidateCode(MD5Util.encode2hex(email)); userDao.save(user);//保存注册信息 ///邮件的内容 StringBuffersb=newStringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!"); sb.append("http://localhost:8080/springmvc/user/register?action=activate&email="); sb.append(email); sb.append("&validateCode="); sb.append(user.getValidateCode()); sb.append(""); //发送邮件 SendEmail.send(email,sb.toString()); System.out.println("发送邮件"); } /** *处理激活 *@throwsParseException */ ///传递激活码和email过来 publicvoidprocessActivate(Stringemail,StringvalidateCode)throwsServiceException,ParseException{ //数据访问层,通过email获取用户信息 UserModeluser=userDao.find(email); //验证用户是否存在 if(user!=null){ //验证用户激活状态 if(user.getStatus()==0){ ///没激活 DatecurrentTime=newDate();//获取当前时间 //验证链接是否过期 currentTime.before(user.getRegisterTime()); if(currentTime.before(user.getLastActivateTime())){ //验证激活码是否正确 if(validateCode.equals(user.getValidateCode())){ //激活成功,//并更新用户的激活状态,为已激活 System.out.println("==sq==="+user.getStatus()); user.setStatus(1);//把状态改为激活 System.out.println("==sh==="+user.getStatus()); userDao.update(user); }else{ thrownewServiceException("激活码不正确"); } }else{thrownewServiceException("激活码已过期!"); } }else{ thrownewServiceException("邮箱已激活,请登录!"); } }else{ thrownewServiceException("该邮箱未注册(邮箱地址不存在)!"); } } }
3.UserModel.java
packagecom.code.model; importjava.beans.Transient; importjava.util.Calendar; importjava.util.Date; publicclassUserModel{ privateLongid; privateStringname; privateStringpassword; privateStringemail;//注册账号 privateintstatus=0;//激活状态 privateStringvalidateCode;//激活码 privateDateregisterTime;//注册时间 ///////////////// publicLonggetId(){ returnid; } publicvoidsetId(Longid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetEmail(){ returnemail; } publicvoidsetEmail(Stringemail){ this.email=email; } publicintgetStatus(){ returnstatus; } publicvoidsetStatus(intstatus){ this.status=status; } publicStringgetValidateCode(){ returnvalidateCode; } publicvoidsetValidateCode(StringvalidateCode){ this.validateCode=validateCode; } publicDategetRegisterTime(){ returnregisterTime; } publicvoidsetRegisterTime(DateregisterTime){ this.registerTime=registerTime; } ///////////////////////// @Transient publicDategetLastActivateTime(){ Calendarcl=Calendar.getInstance(); cl.setTime(registerTime); cl.add(Calendar.DATE,2); returncl.getTime(); } }
4.SendEmail.java
packagecom.app.tools; importjava.util.Date; importjava.util.Properties; importjavax.mail.Authenticator; importjavax.mail.Message; importjavax.mail.MessagingException; importjavax.mail.PasswordAuthentication; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.internet.InternetAddress; importjavax.mail.internet.MimeMessage; publicclassSendEmail{ publicstaticfinalStringHOST="smtp.163.com"; publicstaticfinalStringPROTOCOL="smtp"; publicstaticfinalintPORT=25; publicstaticfinalStringFROM="xxxxx@xx.com";//发件人的email publicstaticfinalStringPWD="123456";//发件人密码 /** *获取Session *@return */ privatestaticSessiongetSession(){ Propertiesprops=newProperties(); props.put("mail.smtp.host",HOST);//设置服务器地址 props.put("mail.store.protocol",PROTOCOL);//设置协议 props.put("mail.smtp.port",PORT);//设置端口 props.put("mail.smtp.auth",true); Authenticatorauthenticator=newAuthenticator(){ @Override protectedPasswordAuthenticationgetPasswordAuthentication(){ returnnewPasswordAuthentication(FROM,PWD); } }; Sessionsession=Session.getDefaultInstance(props,authenticator); returnsession; } publicstaticvoidsend(StringtoEmail,Stringcontent){ Sessionsession=getSession(); try{ System.out.println("--send--"+content); //Instantiateamessage Messagemsg=newMimeMessage(session); //Setmessageattributes msg.setFrom(newInternetAddress(FROM)); InternetAddress[]address={newInternetAddress(toEmail)}; msg.setRecipients(Message.RecipientType.TO,address); msg.setSubject("账号激活邮件"); msg.setSentDate(newDate()); msg.setContent(content,"text/html;charset=utf-8"); //Sendthemessage Transport.send(msg); } catch(MessagingExceptionmex){ mex.printStackTrace(); } } }
5.jsp页面
registerEmailValidae.jsp
注册激活
Email:
register_success.jsp
恭喜你注册成功!请到注册的邮箱点击链接激活!
activate_success.jsp:
账号激活成功,点击这里去登录!
activate_failure.jsp:
激活失败!错误信息:${message}
以上就是Java注册时发送激活邮件和激活的简单实例,如有疑问请留言讨论,共同进步,关于java开发的文章本站还有很多,
欢迎大家,搜索参阅,谢谢大家对本站的支持!