• javamail实现邮箱验证功能


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

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

    //校验用户名
            if(dao.findUserByName(user.getUsername())!=null)
            {
                throw new RuntimeException("用户名已经存在");
            }
            //调用DAO中的方法添加用户
            user.setRole("user");
            user.setState(0);
            user.setActivecode(UUID.randomUUID().toString());
            dao.addUser(user);
            //发送激活邮件
            Properties prop = new Properties();
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.host", "localhost");
            prop.setProperty("mail.smtp.auth", "true");
            prop.setProperty("mail.debug", "true");
            Session session=Session.getInstance(prop);
    
            Message msg=new MimeMessage(session);
            msg.setFrom(new InternetAddress("aa@zj.com"));
            msg.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail()));
            msg.setSubject(user.getUsername()+",来自estore的激活邮件");
            msg.setText(user.getUsername()+"点击如下链接激活用户,如果不能点击请复制到浏览器地址栏访问:localhost/Estore/ActiveServlet?activecode="+user.getActivecode());
    
            Transport trans=session.getTransport();
            trans.connect("aa","123");
            trans.sendMessage(msg, msg.getAllRecipients());
    
            //conn.commit();
            }catch(Exception e)
            {
    
                e.printStackTrace();
                throw new RuntimeException(e);
    
            }
    
        }

    链接地址代码

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

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

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

    完成

  • 相关阅读:
    在Power BI报表和仪表板中显示刷新日期时间
    微软Power BI 每月功能更新系列——12月Power BI 新功能学习
    在Microsoft Power BI中创建地图的10种方法
    您应该将报表从Excel转换为Power BI的8个原因
    OBS录制全屏游戏的方法(超好录屏)
    关于Adobe Premiere Pro视音频不同步的解决方法
    Npcap:Nmap项目里一个为Windows而生的嗅探库 Npcap: Nmap Project's packet sniffing library for Windows
    关于被malloc分配内存的指针
    VS2017 高级使用方法
    Npcap环境配置(Winpcap后继者) pcap的一种
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223740.html
Copyright © 2020-2023  润新知