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;
        }

完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的JavaMail库提供了一个简单而强大的方式来实现邮箱登录。下面是一个示例,展示如何使用JavaMail库在Android应用程序中实现邮箱登录: 首先,你需要在你的Android项目中导入JavaMail库。你可以通过在build.gradle文件中添加以下代码来完成这一步骤: implementation 'javax.mail:javax.mail-api:1.6.2' implementation 'com.sun.mail:android-mail:1.6.2' implementation 'com.sun.mail:android-activation:1.6.2' 然后,你需要创建一个AsynTask类来处理与邮箱登录相关的网络请求。在这个AsynTask类的doInBackground方法中,你可以使用JavaMail库的API来连接到你的邮箱,并通过邮箱提供的验证机制进行登录。以下是一个基本的示例代码: private class EmailLoginTask extends AsyncTask<Void, Void, Boolean> { private String email; private String password; public EmailLoginTask(String email, String password) { this.email = email; this.password = password; } @Override protected Boolean doInBackground(Void... params) { try { Properties properties = new Properties(); properties.put("mail.store.protocol", "imaps"); // 使用IMAP协议连接到邮箱服务器 properties.put("mail.imaps.host", "imap.mail.com"); // 邮箱服务器地址 properties.put("mail.imaps.port", "993"); // 邮箱服务器端口号 Session session = Session.getDefaultInstance(properties); Store store = session.getStore("imaps"); store.connect(email, password); // 使用邮箱和密码进行登录 return true; // 登录成功 } catch (Exception e) { e.printStackTrace(); return false; // 登录失败 } } @Override protected void onPostExecute(final Boolean success) { if (success) { // 登录成功,执行相关逻辑操作 } else { // 登录失败,显示错误信息 } } } 最后,在你的Android活动或碎片中,你可以实例化这个AsynTask类,并调用execute方法来执行邮箱登录任务。例如: String email = "yourEmail@mail.com"; String password = "yourPassword"; EmailLoginTask loginTask = new EmailLoginTask(email, password); loginTask.execute(); 需要注意的是,这只是一个简单的示例。在实际开发中,你可能需要进一步处理验证失败、网络连接错误等异常情况,并根据实际需求在登录成功后执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值