生活随笔
收集整理的這篇文章主要介紹了
Javaweb邮箱验证注册的实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
步驟:
1.調(diào)用后臺在數(shù)據(jù)庫里新增用戶,(應有三個欄位:激活狀態(tài),激活碼,有效時間)
DWR前端:userService.register(u,function(){...})
//-------------------------------------public User register(User user) throws AddressException, NoSuchAlgorithmException, MessagingException{User u = this.loadByEmail(user.getEmail());//驗證數(shù)據(jù)庫是否存在,避免重復郵箱注冊if(u==null) {//MD5密碼加密user.setPassword(SecurityUtil.md5(user.getPassword()));//初始化屬性user.setStatus(0);user.setType("student");user.setPower(0);user.setLevel(0);//調(diào)用發(fā)送郵件服務(wù)--函數(shù)在步驟2user = MailUtil.activateMail(user);this.add(user);}return u;}
2.發(fā)送郵件
public class MailUtil{ public static final String FROM = "zhengzran@163.com";//發(fā)件人的emailpublic static final String PWD = "******";//發(fā)件人密碼--郵箱密碼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";
//---------------自定義函數(shù)-----------------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);//發(fā)送的郵箱內(nèi)容String content = "<p>您好 O(∩_∩)O~~<br><br>歡迎加入iClass!<br><br>帳戶需要激活才能使用,趕緊激活成為iClass正式的一員吧:)<br><br>請在24小時內(nèi)點擊下面的鏈接立即激活帳戶:"+"<br><a href='"+URL+"/activatemail/?token="+token+"&email="+to+"'>"+URL+"/activatemail/?token="+token+"&email="+to+"</a></p>";//調(diào)用發(fā)送郵箱服務(wù)MailUtil.sendMail(to, TITLE, content);return u;}
//---------------發(fā)送郵件-------------------public static void sendMail(String to,String title,String content) throws AddressException, MessagingException {Properties props = new Properties(); //可以加載一個配置文件 // 使用smtp:簡單郵件傳輸協(xié)議 props.put("mail.smtp.host", HOST);//存儲發(fā)送郵件服務(wù)器的信息 props.put("mail.smtp.auth", "true");//同時通過驗證 Session session = Session.getInstance(props);//根據(jù)屬性新建一個郵件會話 //session.setDebug(true); //有他會打印一些調(diào)試信息。 MimeMessage message = new MimeMessage(session);//由郵件會話新建一個消息對象 message.setFrom(new InternetAddress(FROM));//設(shè)置發(fā)件人的地址 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//設(shè)置收件人,并設(shè)置其接收類型為TO message.setSubject(title);//設(shè)置標題 //設(shè)置信件內(nèi)容 //message.setText(mailContent); //發(fā)送 純文本 郵件 todo message.setContent(content, "text/html;charset=gbk"); //發(fā)送HTML郵件,內(nèi)容樣式比較豐富 message.setSentDate(new Date());//設(shè)置發(fā)信時間 message.saveChanges();//存儲郵件信息 //發(fā)送郵件 Transport transport = session.getTransport(SMTP); //Transport transport = session.getTransport(); transport.connect(FROM, PWD);transport.sendMessage(message, message.getAllRecipients());//發(fā)送郵件,其中第二個參數(shù)是所有已設(shè)好的收件人地址 transport.close(); }
如果前面順利的話,就會收到如下的激活郵件:
3.激活郵箱賬號
//SpringMVC的映射@RequestMapping("/activatemail")public String hello(HttpServletRequest request,Model model) throws IOException, AddressException, MessagingException, NoSuchAlgorithmException {//獲取激活參數(shù)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"));//重新發(fā)送激活郵件u = MailUtil.activateMail(u);//重新設(shè)置了有效時間和token激活碼userService.updateUser(u);ud.setTime(-1);model.addAttribute("user", JsonUtil.toJson(ud));//resp.getWriter().write(JsonUtil.toJson(u));} else if (u.getActivateTime()>time){//在時間內(nèi)u.setActivateTime(Long.parseLong("1"));ud.setTime(1);if(u.getToken().equals(token)) {//在時間內(nèi)且激活碼通過,激活成功u.setStatus(1);u.setCreateDate(new Date());//重新設(shè)置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 {//在時間內(nèi)但是且激活碼錯誤ud.setToken(-1);model.addAttribute("user", JsonUtil.toJson(ud));}}//u.getStatus()!=1判斷結(jié)束} else if(u.getStatus()==1) {//已經(jīng)被激活的重復點鏈接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";}基本完成了郵箱驗證注冊功能,不同的框架可能會有一些差別,但原理基本是一樣的,
注意,發(fā)送郵箱的賬號需要把smtp服務(wù)打開,163郵箱默認就是打開的。
總結(jié)
以上是生活随笔為你收集整理的Javaweb邮箱验证注册的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。