使用JavaMail实现激活示例
一、准备配置文件
mail.properties:
Java Code
1 2 3 4 5 6 7 | host=邮件服务器 uname=用户名 pwd=密码 from=发件人 subject=主题 //邮件内容,一个超链接,链接到Servlet的激活方法,{0}是占位符,便于在Servlet中替换成激活码, content=<a href="http://localhost:8080/bookstore/UserServlet?method=active&code={0}">\u70B9\u51FB\u8FD9\u91CC\u5B8C\u6210\u6FC0\u6D3B</a> |
二、在Servlet中发邮件
1,准备配置文件
Java Code
1 2 3 4 5 6 7 8 9 10 11 | Properties props = new Properties(); props.load(this.getClass().getClassLoader() .getResourceAsStream("email.properties")); ///加载刚刚写的配置文件 String host = props.getProperty("host");//获取服务器主机 String uname = props.getProperty("uname");//获取用户名 String pwd = props.getProperty("pwd");//获取密码 String from = props.getProperty("from");//获取发件人 String to = form.getEmail();//获取收件人 String subject = props.getProperty("subject");//获取主题 String content = props.getProperty("content");//获取邮件内容 content = MessageFormat.format(content, form.getCode());//替换{0} |
2,得到session,创建邮件对象,并发送邮件
Java Code
1 2 3 4 5 6 | Session session = MailUtils.createSession(host, uname, pwd);//得到session Mail mail = new Mail(from, to, subject, content);//创建邮件对象 try { MailUtils.send(session, mail);//发邮件! } catch (MessagingException e) { } |
三、保存成功信息,转发到msg.jsp
Java Code
1 2 3 4 5 6 | /* * 1. 保存成功信息 * 2. 转发到msg.jsp */ request.setAttribute("msg", "恭喜,注册成功!请马上到邮箱激活"); return "f:/jsps/msg.jsp"; |
四、激活完成
1,dao层实现
Java Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /** * 按激活码查询 * @param code * @return */ public User findByCode(String code) { try { String sql = "select * from tb_user where code=?"; return qr.query(sql, new BeanHandler<User>(User.class), code); } catch(SQLException e) { throw new RuntimeException(e); } } /** * 修改指定用户的指定状态 * @param uid * @param state */ public void updateState(String uid, boolean state) { try { String sql = "update tb_user set state=? where uid=?"; qr.update(sql, state, uid); } catch(SQLException e) { throw new RuntimeException(e); } } |
2,service层完成
Java Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** * 激活功能 * @throws UserException */ public void active(String code) throws UserException { /* * 1. 使用code查询数据库,得到user */ User user = userDao.findByCode(code); /* * 2. 如果user不存在,说明激活码错误 */ if(user == null) throw new UserException("激活码无效!"); /* * 3. 校验用户的状态是否为未激活状态,如果已激活,说明是二次激活,抛出异常 */ if(user.isState()) throw new UserException("您已经激活过了,不要再激活了!"); /* * 4. 修改用户的状态 */ userDao.updateState(user.getUid(), true); } |
3,Servlet层完成
Java Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public String active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1. 获取参数激活码 * 2. 调用service方法完成激活 * > 保存异常信息到request域,转发到msg.jsp * 3. 保存成功信息到request域,转发到msg.jsp */ String code = request.getParameter("code"); try { userService.active(code); request.setAttribute("msg", "恭喜,您激活成功了!请马上登录!"); } catch (UserException e) { request.setAttribute("msg", e.getMessage()); } return "f:/jsps/msg.jsp"; } |