忘记密码中的邮箱验证

来源:互联网 发布:模拟板胡软件 编辑:程序博客网 时间:2024/05/01 05:35

1.实体类字段——发送邮件所需的字段

public class EmailVO implements Serializable{// 主机名,就是邮件服务器 例如:smtp.163.comprivate String host;// 发件人的邮箱的用户名private String username;// 发件人的邮箱的密码private String password;// 发件人的邮箱, 与用户名一致private String from;// 邮件内容private String content;// 邮件主题private String subject;// 收件人private String to;    ........}

2.获取发送人邮箱信息 发送邮件到客户邮箱进行验证

@RequestMapping("/email/send")public String send(Model model, String userEmail, String username) {   //判断是否有参数传入   if(username == null || "".equals(username)  || userEmail ==null || "".equals(userEmail)){    return "password_1";}    EmailVO emailVo = new EmailVO();    //从数据库中读取发送人的信息    EmailConfig email = emailSrv.queryEmail(1L);        emailVo.setSubject(email.getSubject());        emailVo.setUsername(email.getUsername());        emailVo.setHost(email.getHost());        emailVo.setFrom(email.getFrom());        emailVo.setPassword(email.getPassword());        //你要发给谁的邮箱    emailVo.setTo(userEmail);    // 从配置文件中读取发送人的信息ResourceBundle rb = ResourceBundle.getBundle("mail");    String emailurl = rb.getString("emailurl");    //获取当前时间    Date currentTime = new Date();    //盐值获取--    String salt = Encrypt.md5(username, String.valueOf(currentTime));        //发送内容 emailVo.setContent(MessageFormat.format(email.getContent(), emailurl, username, salt));    EmailLog emailLog = new EmailLog();    try {        //根据用户名查询数据库中是否有  用户信息        emailLog.setUsername(username);        EmailLog isEmail = emailLogSrv.queryByWhere(emailLog);        if(isEmail == null){        //获取当前的记录信息        emailLog.setUsername(username);        emailLog.setSalt(salt);        emailLog.setEmailStatus(0);        emailLog.setCreateTime(currentTime);        emailLog.setUpdateTime(currentTime);        //添加新记录        emailLogSrv.saveEmail(emailLog);        }else{        //修改当前的记录信息        isEmail.setSalt(salt);        isEmail.setEmailStatus(0);        isEmail.setUpdateTime(currentTime);        emailLogSrv.update(isEmail);        }        //发送邮件给客户        sendMail.sendMail(emailVo);    } catch (Exception e) {        e.printStackTrace();    model.addAttribute("resultMsg", "邮件发送失败!");        return "password_1";    }    model.addAttribute("isSend", 1);    return "password_2";}

3.创建邮件信息对象发送

public class EmailService  {// 因为匿名内部类里面用到了这个类的属性,所以要设置为finalpublic void sendMail(final EmailVO email) throws Exception {    // 读取资源文件    Properties props = new Properties();    props.setProperty("mail.smtp.auth", "true");    props.setProperty("mail.smtp.host", email.getHost());    /**     * 创建认证     */     Authenticator auth = new Authenticator() {     @Override     protected PasswordAuthentication getPasswordAuthentication() {     return new PasswordAuthentication(email.getUsername(), email.getPassword());        }    };    Session session = Session.getInstance(props, auth);    // 创建邮件信息的对像    MimeMessage msg = new MimeMessage(session);    msg.setFrom(new InternetAddress(email.getFrom(),"中国盲文图书馆管理员","UTF-8"));    msg.setRecipients(RecipientType.TO, email.getTo());    msg.setSubject(email.getSubject());    msg.setContent(email.getContent(), "text/html;charset=UTF-8");    // 发送邮件    Transport.send(msg);}}

4.邮箱认证

@RequestMapping("/forget/password/3")public String pass(Model model, String username, String salt) {    if(username == null || salt == null){        return "password_1";    }    EmailLog emailLog = new EmailLog();    //根据用户名查询数据库中的 用户信息    emailLog.setUsername(username);    EmailLog isEmail = emailLogSrv.queryByWhere(emailLog);    String saltLog = isEmail.getSalt();    Integer state = isEmail.getEmailStatus();    Long date = isEmail.getUpdateTime().getTime();    //获取当前时间与修改时间进行相减  看看是否大于30分钟    Long current = new Date().getTime();    Long isLarge = current - date;    //三十分钟有效时间    Long thirty = (long) (1000 * 60 * 30);    if(thirty > isLarge && salt.equals(saltLog) && 0 == state){        //修改记录信息   返回修改页面继续修改         isEmail.setEmailStatus(1);        isEmail.setUpdateTime(new Date());        emailLogSrv.update(isEmail);        model.addAttribute("username", username);        return "password_3";    }else{        model.addAttribute("resultMsg", "链接已失效,请重新操作!");        return "password_1";    }}