使用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" ; } |