后台登陆界面之忘记密码功能的实现(通过邮件重置密码)

后台登陆界面之忘记密码功能的实现(通过邮件重置密码)

这两天接触到了忘记密码这个功能,在网上查了好久的资料,虽然原理很多部分还没有理解,但是功能已经实现。

下面实现的代码,放到这里以备后用。

1.发送邮件需要的基本信息。

 1 package edu.bookstore.util;
 2 
 3 /**  
 4 * 发送邮件需要使用的基本信息  
 5 */   
 6 import java.util.Properties; 
7 public class MailSenderInfo { 8 // 发送邮件的服务器的IP和端口 9 private String mailServerHost; 10 private String mailServerPort = "25"; 11 // 邮件发送者的地址 12 private String fromAddress; 13 // 邮件接收者的地址 14 private String toAddress; 15 // 登陆邮件发送服务器的用户名和密码 16 private String userName; 17 private String password; 18 // 是否需要身份验证 19 private boolean validate = false; 20 // 邮件主题 21 private String subject; 22 // 邮件的文本内容 23 private String content; 24 // 邮件附件的文件名 25 private String[] attachFileNames; 26 /** 27 * 获得邮件会话属性 28 */ 29 public Properties getProperties(){ 30 Properties p = new Properties(); 31 p.put("mail.smtp.host", this.mailServerHost); 32 p.put("mail.smtp.port", this.mailServerPort); 33 p.put("mail.smtp.auth", validate ? "true" : "false"); 34 return p; 35 } 36 public String getMailServerHost() { 37 return mailServerHost; 38 } 39 public void setMailServerHost(String mailServerHost) { 40 this.mailServerHost = mailServerHost; 41 } 42 public String getMailServerPort() { 43 return mailServerPort; 44 } 45 public void setMailServerPort(String mailServerPort) { 46 this.mailServerPort = mailServerPort; 47 } 48 public boolean isValidate() { 49 return validate; 50 } 51 public void setValidate(boolean validate) { 52 this.validate = validate; 53 } 54 public String[] getAttachFileNames() { 55 return attachFileNames; 56 } 57 public void setAttachFileNames(String[] fileNames) { 58 this.attachFileNames = fileNames; 59 } 60 public String getFromAddress() { 61 return fromAddress; 62 } 63 public void setFromAddress(String fromAddress) { 64 this.fromAddress = fromAddress; 65 } 66 public String getPassword() { 67 return password; 68 } 69 public void setPassword(String password) { 70 this.password = password; 71 } 72 public String getToAddress() { 73 return toAddress; 74 } 75 public void setToAddress(String toAddress) { 76 this.toAddress = toAddress; 77 } 78 public String getUserName() { 79 return userName; 80 } 81 public void setUserName(String userName) { 82 this.userName = userName; 83 } 84 public String getSubject() { 85 return subject; 86 } 87 public void setSubject(String subject) { 88 this.subject = subject; 89 } 90 public String getContent() { 91 return content; 92 } 93 public void setContent(String textContent) { 94 this.content = textContent; 95 } 96 }

 

2.邮件密码验证。

 1 package edu.bookstore.util;
 2 
 3 import javax.mail.Authenticator;
 4 import javax.mail.PasswordAuthentication;
 5 
 6 
 7 public class MyAuthenticator extends Authenticator{  
 8     String userName=null;  
 9     String password=null;  
10        
11     public MyAuthenticator(){  
12     }  
13     public MyAuthenticator(String username, String password) {   
14         this.userName = username;   
15         this.password = password;   
16     }   
17     protected PasswordAuthentication getPasswordAuthentication(){  
18         return new PasswordAuthentication(userName, password);  
19     }  
20 }  

 

3.简单邮件(不带附件的邮件)发送器 

  1 package edu.bookstore.util;
  2 
  3 
  4 import java.util.Date;   
  5 import java.util.Properties;  
  6 import javax.mail.Address;   
  7 import javax.mail.BodyPart;   
  8 import javax.mail.Message;   
  9 import javax.mail.MessagingException;   
 10 import javax.mail.Multipart;   
 11 import javax.mail.Session;   
 12 import javax.mail.Transport;   
 13 import javax.mail.internet.InternetAddress;   
 14 import javax.mail.internet.MimeBodyPart;   
 15 import javax.mail.internet.MimeMessage;   
 16 import javax.mail.internet.MimeMultipart;   
 17   
 18 /**  
 19 * 简单邮件(不带附件的邮件)发送器  
 20 */   
 21 public class SimpleMailSender  {   
 22 /**  
 23   * 以文本格式发送邮件  
 24   * @param mailInfo 待发送的邮件的信息  
 25   */   
 26     public boolean sendTextMail(MailSenderInfo mailInfo) {   
 27       // 判断是否需要身份认证   
 28       MyAuthenticator authenticator = null;   
 29       Properties pro = mailInfo.getProperties();  
 30       if (mailInfo.isValidate()) {   
 31       // 如果需要身份认证,则创建一个密码验证器   
 32         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
 33       }  
 34       // 根据邮件会话属性和密码验证器构造一个发送邮件的session   
 35       Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
 36       try {   
 37       // 根据session创建一个邮件消息   
 38       Message mailMessage = new MimeMessage(sendMailSession);   
 39       // 创建邮件发送者地址   
 40       Address from = new InternetAddress(mailInfo.getFromAddress());   
 41       // 设置邮件消息的发送者   
 42       mailMessage.setFrom(from);   
 43       // 创建邮件的接收者地址,并设置到邮件消息中   
 44       Address to = new InternetAddress(mailInfo.getToAddress());   
 45       mailMessage.setRecipient(Message.RecipientType.TO,to);   
 46       // 设置邮件消息的主题   
 47       mailMessage.setSubject(mailInfo.getSubject());   
 48       // 设置邮件消息发送的时间   
 49       mailMessage.setSentDate(new Date());   
 50       // 设置邮件消息的主要内容   
 51       String mailContent = mailInfo.getContent();   
 52       mailMessage.setText(mailContent);   
 53       // 发送邮件   
 54       Transport.send(mailMessage);  
 55       return true;   
 56       } catch (MessagingException ex) {   
 57           ex.printStackTrace();   
 58       }   
 59       return false;   
 60     }   
 61       
 62     /**  
 63       * 以HTML格式发送邮件  
 64       * @param mailInfo 待发送的邮件信息  
 65       */   
 66     public static boolean sendHtmlMail(MailSenderInfo mailInfo){   
 67       // 判断是否需要身份认证   
 68       MyAuthenticator authenticator = null;  
 69       Properties pro = mailInfo.getProperties();  
 70       //如果需要身份认证,则创建一个密码验证器    
 71       if (mailInfo.isValidate()) {   
 72         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
 73       }   
 74       // 根据邮件会话属性和密码验证器构造一个发送邮件的session   
 75       Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
 76       try {   
 77       // 根据session创建一个邮件消息   
 78       Message mailMessage = new MimeMessage(sendMailSession);   
 79       // 创建邮件发送者地址   
 80       Address from = new InternetAddress(mailInfo.getFromAddress());   
 81       // 设置邮件消息的发送者   
 82       mailMessage.setFrom(from);   
 83       // 创建邮件的接收者地址,并设置到邮件消息中   
 84       Address to = new InternetAddress(mailInfo.getToAddress());   
 85       // Message.RecipientType.TO属性表示接收者的类型为TO   
 86       mailMessage.setRecipient(Message.RecipientType.TO,to);   
 87       // 设置邮件消息的主题   
 88       mailMessage.setSubject(mailInfo.getSubject());   
 89       // 设置邮件消息发送的时间   
 90       mailMessage.setSentDate(new Date());   
 91       // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象   
 92       Multipart mainPart = new MimeMultipart();   
 93       // 创建一个包含HTML内容的MimeBodyPart   
 94       BodyPart html = new MimeBodyPart();   
 95       // 设置HTML内容   
 96       html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");   
 97       mainPart.addBodyPart(html);   
 98       // 将MiniMultipart对象设置为邮件内容   
 99       mailMessage.setContent(mainPart);   
100       // 发送邮件   
101       Transport.send(mailMessage);   
102       return true;   
103       } catch (MessagingException ex) {   
104           ex.printStackTrace();   
105       }   
106       return false;   
107     }   
108 }   

4.邮件发送的准备。(这里需要注意的是,邮件的密码不能真实的密码。必须为邮件的授权码)

 1 package edu.bookstore.util;
 2 
 3 public class MyEamil {
 4 
 5     public static Boolean sendMail(String Email) {
 6         
 7     boolean flag = false;
 8         //这个类主要是设置邮件  
 9      MailSenderInfo mailInfo = new MailSenderInfo();   
10      mailInfo.setMailServerHost("smtp.qq.com");   
11      mailInfo.setMailServerPort("25");   
12      mailInfo.setValidate(true);   
13      mailInfo.setUserName("xxxxxxxxx@qq.com");   
14      mailInfo.setPassword("xxxxxxxxxxx");//这里要注意。不能是邮箱的密码,要是邮箱的授权码。
15      mailInfo.setFromAddress("xxxxxxx@qq.com");   
16      mailInfo.setToAddress(Email);   
17      mailInfo.setSubject("重置密码");   
18      mailInfo.setContent("您的重置密码为:xxx");   
19         //这个类主要来发送邮件  
20      SimpleMailSender sms = new SimpleMailSender();  
21          sms.sendTextMail(mailInfo);//发送文体格式   
22 //         sms.sendHtmlMail(mailInfo);//发送html格式  
23          
24      flag = true;
25      
26      return flag;
27       
28     }
29 }

 

posted @ 2018-10-29 00:29  海掌柜  阅读(2149)  评论(0编辑  收藏  举报