失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 黑马旅游网编写练习(2)--邮箱激活功能

黑马旅游网编写练习(2)--邮箱激活功能

时间:2018-12-23 06:23:46

相关推荐

黑马旅游网编写练习(2)--邮箱激活功能

黑马旅游网编写练习(2)–邮箱激活功能

当用户进行注册时,一般会需要使用邮箱进行激活;所以在这里也模拟一下注册后邮箱的激活功能。

首先导入发送邮箱的jar包mail.jar;或者配置maven地址为:

<!--javaMail--><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.6</version></dependency><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.5.3</version></dependency>

然后编写Java发送邮箱的代码,如下:

/*** 发邮件工具类*/public final class MailUtils {private static final String USER = "1330495503@"; // 发件人称号,同邮箱地址private static final String PASSWORD = "xxxxxxxxxxxx"; // 如果是qq邮箱可以使户端授权码,或者登录密码/**** @param to 收件人邮箱* @param text 邮件正文* @param title 标题*//* 发送验证信息的邮件 */public static boolean sendMail(String to, String text, String title){try {final Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", "");// 发件人的账号props.put("mail.user", USER);//发件人的密码props.put("mail.password", PASSWORD);// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);// 设置发件人String username = props.getProperty("mail.user");InternetAddress form = new InternetAddress(username);message.setFrom(form);// 设置收件人InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 设置邮件标题message.setSubject(title);// 设置邮件的内容体message.setContent(text, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);return true;}catch (Exception e){e.printStackTrace();}return false;}public static void main(String[] args) throws Exception {// 做测试用try {MailUtils.sendMail("shengguilv@","你好,这是一封测试邮件,无需回复。","测试邮件");} catch (Exception e) {//e.printStackTrace(); //发送失败System.out.println("邮件发送失败");}System.out.println("发送成功");}}

注意:使用上述工具进行发送时,需要首先开启相应的pop3服务,然后使用授权码作为发送邮件人的密码使用,以防止泄露密码

在这里我使用的是qq邮箱给163邮箱发送邮件;所以我需要开启QQ邮箱的pop3服务;然后我收到一个授权码,替换上述PASSWORD = "xxxxxxxxxxxx"中的xxxxxxxxxxxx即可。

邮件发送功能测试完成后,接下来开始编写用户注册后的邮箱激活功能

在开始编写之前,还需要对之前的service层的regist方法进行修改,在此处为用户添加激活状态为N,并添加激活码(唯一标识)。然后还需要修改dao层的regist方法,将这两个新加的变量也写到数据库中。

service层的regist方法修改如下:

/*** 注册用户,注册成功返回true* @param user* @return*/@Overridepublic Boolean regist(User user) {// 先设置用户的激活状态为N,并添加激活码,唯一标识user.setStatus("N");user.setCode(UuidUtil.getUuid());System.out.println("Code:"+user.getCode());// 调用dao层查询数据库User u = dao.regist(user);if(u != null){// 注册成功// 给注册用户发送邮件提醒激活,当用户点击激活时,会访问activeUserServlet,并提交该用户的激活码String msg = "<div>欢迎注册黑马旅游网,请点击此处进行<a href='http://localhost/travel/activeUserServlet?code="+u.getCode()+"'>激活</a><br/><br/>本邮件由系统自动发出,请勿回复。<br/>感谢您的使用。</div>";MailUtils.sendMail(u.getEmail(),msg,"激活邮件");return true;}else {//注册失败return false;}}

dao层的regist方法修改如下:

/*** 注册用户,返回user* @param user* @return*/@Overridepublic User regist(User user) {// 编写sqlString sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";// 执行sqltry {template.update(sql,user.getUsername(),user.getPassword(),user.getName(),user.getBirthday(),user.getSex(),user.getTelephone(),user.getEmail(),user.getStatus(),user.getCode());} catch (DataAccessException e) {//e.printStackTrace(); 注册失败System.out.println("dao----Registered Faild!");return null;}return user;}

接下来开始编写邮箱激活的activeUserServlet,我们已经设置了用户点击激活时,会访问此资源,并且提交该用户的唯一标识。所以我们需要通过该唯一标识,查找到该用户,然后设置该用户的激活状态为Y。激活后会跳转到一个单独的界面,上面会给出激活成功与否的提示,若激活成功,则给出一个登录的超链接,点击登录后跳转到登陆界面login.html

activeUserServlet的主要代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收用户的激活码String code = request.getParameter("code");System.out.println("code:"+code);if(code == null || code.length() <= 0){// 激活码不存在return;}//调用service层方法,完成邮箱的激活UserService service = new UserServiceImpl();Boolean activated = service.active(code);String msg = null;if(activated){// 激活成功System.out.println("Active succeed!");msg = "激活成功,请<a href='login.html'>登录</a>";}else{//激活失败System.out.println("Active failed!");msg = "激活失败,请重新激活";}//将消息发送给客户端response.setContentType("text/html;charset=utf-8");response.getWriter().write(msg);}

需要在service层添加一个active方法,用来激活用户;主要代码如下:

/*** 通过激活码给用户进行激活,激活成功返回true* @param code* @return*/@Overridepublic Boolean active(String code) {// 调用dao层通过激活码查询用户方法User user = dao.findUserByCode(code);// 判断用户是否存在if(user == null){// 用户不存在System.out.println("service:--the user isn`t exist!");return false;}// 调用dao层修改用户激活状态为Y的方法dao.updateUserStatus(user);return true;}

然后需要在dao层添加两个方法,一个用来根据激活码查询用户是否存在,称作findUserByCode方法;另一个用来修改用户的激活状态码为Y,称作updateUserStatus方法。两个方法的主要代码如下:

/*** 通过激活码查询用户,,若存在,返回User* @param code* @return*/@Overridepublic User findUserByCode(String code) {// 定义sqlString sql = "select * from tab_user where code = ? ";try {// 执行sqlUser user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), code);return user;} catch (DataAccessException e) {//e.printStackTrace(); //查询出错System.out.println("NO user find, where code = " + code);return null;}}/*** 修改用户的激活状态为Y* @param user*/@Overridepublic void updateUserStatus(User user) {// 定义sqlString sql = "update tab_user set status = 'Y' where uid = ? ";try {// 执行sqltemplate.update(sql,user.getUid());} catch (DataAccessException e) {//e.printStackTrace(); //修改用户激活状态出错System.out.println("Error in updateUserStatus!");}}

据此,便可以实现新注册用户的邮箱验证功能了;接下来便开始编写用户的登录功能,只有注册成功并进行了邮件激活的用户才可以登录。

如果觉得《黑马旅游网编写练习(2)--邮箱激活功能》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。