忘记密码中的邮箱验证
来源:互联网 发布:模拟板胡软件 编辑:程序博客网 时间: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"; }}
阅读全文
0 0
- 忘记密码中的邮箱验证
- 忘记密码发送验证码到邮箱
- 邮箱/密码格式验证
- 邮箱文件设置密码忘记 解密
- 邮箱激活账号与忘记密码
- asp.net 邮箱验证 密码
- PHP中的邮箱验证
- Spring 中的邮箱验证
- JS中的邮箱验证
- java web 邮箱激活 与 忘记密码(重置密码)
- java web 邮箱激活 与 忘记密码(重置密码)
- javaScript验证代码(用户名,密码,邮箱)
- javaScript验证代码(用户名,密码,邮箱)
- python写邮箱名及密码验证
- JS练习-用户名-密码-邮箱格式验证
- form表单 用户名,密码和邮箱验证
- 正则表达式验证用户名、邮箱、密码
- Java代码bi邮箱验证,找回密码
- MacOS 开发
- 面试总结(更新)
- GKAgent
- Java 8的新特性—终极版
- Machine Learning Yearning读书笔记(转载)
- 忘记密码中的邮箱验证
- springboot+mybatis+springmvc+mysql简单项目
- 背景图片全屏(背景图片没有撑满屏幕)
- 8-33 求二叉树的深度
- webbrowser获取无ID无Name控件并模拟点击
- echarts绵阳地图,点击区拿到对应区的数据
- MySQL/Mariadb基准测试工具-sysbench使用2
- 02.JavaScript语法上
- Java-求合数的质因数