javamail实现邮箱验证功能

r囧r小猫 2022-08-21 04:55 332阅读 0赞

javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现

用户注册后通过servlet得到邮箱地址,并使用方法发送邮件

  1. //校验用户名
  2. if(dao.findUserByName(user.getUsername())!=null)
  3. {
  4. throw new RuntimeException("用户名已经存在");
  5. }
  6. //调用DAO中的方法添加用户
  7. user.setRole("user");
  8. user.setState(0);
  9. user.setActivecode(UUID.randomUUID().toString());
  10. dao.addUser(user);
  11. //发送激活邮件
  12. Properties prop = new Properties();
  13. prop.setProperty("mail.transport.protocol", "smtp");
  14. prop.setProperty("mail.smtp.host", "localhost");
  15. prop.setProperty("mail.smtp.auth", "true");
  16. prop.setProperty("mail.debug", "true");
  17. Session session=Session.getInstance(prop);
  18. Message msg=new MimeMessage(session);
  19. msg.setFrom(new InternetAddress("aa@zj.com"));
  20. msg.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail()));
  21. msg.setSubject(user.getUsername()+",来自estore的激活邮件");
  22. msg.setText(user.getUsername()+"点击如下链接激活用户,如果不能点击请复制到浏览器地址栏访问:localhost/Estore/ActiveServlet?activecode="+user.getActivecode());
  23. Transport trans=session.getTransport();
  24. trans.connect("aa","123");
  25. trans.sendMessage(msg, msg.getAllRecipients());
  26. //conn.commit();
  27. }catch(Exception e)
  28. {
  29. e.printStackTrace();
  30. throw new RuntimeException(e);
  31. }
  32. }

链接地址代码

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. UserService service=BasicFactory.getFactory().getService(UserService.class);
  4. //激活用户
  5. //获取激活码
  6. String activecode=request.getParameter("activecode");
  7. //调用Service中的方法激活
  8. User user=service.active(activecode);
  9. //激活成功后登陆用户
  10. request.getSession().setAttribute("user", user);
  11. //激活成功后3秒回主页
  12. response.getWriter().write("激活成功,3秒回主页");
  13. response.setHeader("Refresh", "3;url=index.jsp");
  14. }

与数据库中的激活码进行验证

  1. public User active(String activecode) {
  2. // TODO 自动生成的方法存根
  3. User findU=new User();
  4. findU.setActivecode(activecode);
  5. User user=dao.findUserByActivecode(activecode);
  6. if(user==null)
  7. {
  8. throw new RuntimeException("激活码不存在,请检查您的激活码");
  9. }
  10. //如果用户已经激活过,不能重复激活
  11. if(user.getState()!=0)
  12. {
  13. throw new RuntimeException("用户已经激活,不要重复激活,请直接登陆");
  14. }
  15. //用户没有激活,但激活码已经激活
  16. if(System.currentTimeMillis() - user.getUpdatetime().getTime()>1000*3600*24)
  17. {
  18. dao.delete(user.getId());
  19. throw new RuntimeException("激活码超时,此用户作废,请重新注册");
  20. }
  21. dao.updateState(user.getId());
  22. user.setState(1);
  23. return user;
  24. }

完成

发表评论

表情:
评论列表 (有 0 条评论,332人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php实现邮箱验证

    一、Introduction 需求是用户在注册时填写email,注册后,需要到邮箱验证后才能登陆。 二、实现 验证流程,注册成功后,为用户生成一个验证码;将验证码以连接方

    相关 邮箱验证功能实现

    在进行实际项目的开发过程中,我们可能会遇到需要需要对用户账号密码进行找回,这时就需要我们通过邮件进行验证,从而对用户信息进行修改,下面我就将自己开发过程中的邮件发送功能简单描述