后台登陸界面之忘記密碼功能的實現(通過郵件重置密碼)


后台登陸界面之忘記密碼功能的實現(通過郵件重置密碼)

這兩天接觸到了忘記密碼這個功能,在網上查了好久的資料,雖然原理很多部分還沒有理解,但是功能已經實現。

下面實現的代碼,放到這里以備后用。

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM