忘記密碼中的郵箱驗證

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

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章