忘记密码中的邮箱验证

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

public class EmailVO implements Serializable{

// 主机名,就是邮件服务器 例如:smtp.163.com
private 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  {

// 因为匿名内部类里面用到了这个类的属性,所以要设置为final
public 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";
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值