JavaWeb注册的邮件激活

【JavaWeb注册的邮件激活】首先在数据库表里面建立使用uuid生成的唯一序列
JavaWeb注册的邮件激活
文章图片

在pom文件中加入mail的依赖

javax.mail mail 1.4.7

引入MailUtils工具类
package com.whpu.utils; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.util.Properties; /** * 发邮件工具类 */ public final class MailUtils { // 发件人邮箱地址 private static String from = "XXXX@163.com"; // 发件人称号,同邮箱地址 private static String user = "XXXX@163.com"; // 发件人邮箱客户端授权码 private static String password = "XXXXXXXX"; //发件人的邮箱服务器 private static String mailHost = "smtp.163.com"; /** * @param to * @param text * @param title */ /* 发送验证信息的邮件 */ public static boolean sendMail(String to, String text, String title) { Properties props = new Properties(); // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器) props.put("mail.smtp.host", mailHost); // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条) props.put("mail.smtp.auth", "true"); // 用刚刚设置好的props对象构建一个session Session session = Session.getDefaultInstance(props); // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使用(你可以在控制台(console)上看到发送邮件的过程) // session.setDebug(true); // 用session为参数定义消息对象 MimeMessage message = new MimeMessage(session); try { // 加载发件人地址 message.setFrom(new InternetAddress(from)); // 加载收件人地址 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 加载标题 message.setSubject(title); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart(); // 设置邮件的文本内容 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent(text, "text/html; charset=utf-8"); multipart.addBodyPart(contentPart); message.setContent(multipart); message.saveChanges(); // 保存变化 // 连接服务器的邮箱 Transport transport = session.getTransport("smtp"); // 把邮件发送出去 transport.connect(mailHost, user, password); transport.sendMessage(message, message.getAllRecipients()); transport.close(); System.out.println("邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); return false; } return true; }public static void main(String[] args) { // 做测试用 String toMail = "XXX@qq.com"; String text = "你好,激活有惊喜噢"; String title = "测试小通知"; sendMail(toMail, text, title); } }

这里使用的是163邮箱,如果使用qq邮箱的话,将mailHost 改为smtp.qq.com就行了。
前台注册页面就不写,直接上controller
/** * 注册 * @param user * @param password2 * @param model * @return */ @RequestMapping("/register") public String register(User user,@RequestParam("password2") String password2,Model model){ User u =userService.findByEmail(user.getEmail()); if (u!=null){ model.addAttribute("msg","邮箱已被注册,请点击忘记密码"); return "register"; } if (!password2.equals(user.getPassword())){ model.addAttribute("msg","两次输入密码不一致"); return "register"; } user.setAvatar("/img/avatar.png"); user.setBorrow(0); user.setStatus(0); user.setIsShow(1); user.setType(2); Date date = new Date(); user.setCreatTime(date); user.setUpdateTime(date); user.setActcode(UuidUtil.getUuid()); userService.register(user); model.addAttribute("msg","注册成功,登陆前请到邮箱激活"); return "login"; }

在注册的service层中,保存账户,并发送激活邮箱:
/** * 注册 * @param user */ @Override public void register(User user) { userDao.save(user); //发送激活邮箱 String content = "点击+user.getActcode()+"'>激活,激活后可以登录账号"; String title = "账号激活"; MailUtils.sendMail(user.getEmail(),content,title); }

JavaWeb注册的邮件激活
文章图片

打开邮件:
JavaWeb注册的邮件激活
文章图片

这里是一个链接
"点击激活,激活后可以登录账号"

点击之后转发后台controller
/** * 激活 * @param code * @param model * @return */ @RequestMapping(value = "https://www.it610.com/active/{code}",produces = "text/html; charset=UTF-8") @ResponseBody public String active(@PathVariable String code ,Model model){ boolean flag = userService.active(code); if (flag) { return "激活成功,请点击登录"; }else{ return "激活失败,请点击lzq52066@163.com联系管理员"; } }

调用active方法,在dao层根据生成的唯一code将status置为1就可以了。
@Update("update user set status=1 where actcode=#{code}") int active(@RequestParam("code") String code);

    推荐阅读