發送郵件,找回密碼的功能


 發送郵件找回密碼功能(分析加實例)(如有錯誤請指出,謝謝)

分析:

大致思路就是發送郵件→連接郵件里的URL→修改密碼

1.為了保證安全性,需要生成發送到郵件的URL,主要參數(用戶名,過期時間,key(key 需要在每次運行是自動生成隨機碼), IP等等)   然后將URL發送到郵箱。

2.保存發送的參數(建議保存在數據庫)

3.解析url:首先根據用戶名從數據庫中查找出密鑰key和過期時間,沒有則表示該請求 是偽造的或者過期的,然后驗證簽名,驗證過期時間,都驗證通過,就可以修改密碼, 密碼修改完以后,刪除數據庫中的記錄。

.net實例代碼:

 1 分為發送郵箱頁面和修改密碼頁面:
 2        一.發送郵箱頁面
 3         string strUserName = txtUserName.Value.Trim();
 4         string strEail = txtEmail.Value.Trim();
 5       //生成隨機密碼
 6         string rand = "";
 7         Random ramPwd = new Random();
 8         string pwd = ramPwd.Next(100000, 9999999).ToString();
 9         rand = pwd;
10         string  key = rand + strName + email + "Base";
11 
12 
13         if (!string.IsNullOrEmpty(strUserName) && !string.IsNullOrEmpty(strEail))
14         {
15                 //發送郵件
16                 StringBuilder sb = new StringBuilder();
17                 sb.Append("親愛的" + strUserName + "您好:<br/><br/>");
18                 sb.Append("點擊以下鏈接設置新密碼。<br/><br/>");
19                 sb.Append("<a href =\"http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + "\">http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + " </a><br/><br/>");
20                 sb.Append("(如果無法點擊該URL鏈接地址,請將它復制並粘帖到瀏覽器的地址輸入框,然后單擊回車即可。)<br/><br/>");
21                 sb.Append("注意:請您在收到郵件24小時內使用,否則該鏈接將會失效。<br/><br/>");
22                 sb.Append("我們將一如既往、熱忱的為您服務!<br/><br/>");
23                 string MessageBody = sb.ToString();
24                 Sends(strEail, "no_reply@xxxx.com", "xxxx--找回密碼", MessageBody, "123456");
25 
26                 //向find_password_log表添加數據
27                 AddFindPassword(strUserName, strEail,key);
28 
29                 Response.Write("<script>alert('郵件已發送到你的郵箱,請注意查收!');location.href='/';</script>");
30 
31             }
32         }
33 
34 
35    //向表find_password_log中添加數據
36     private void AddFindPassword(string strName, string email, string key)
37     {
38         //向find_password_log表中插入隨機生成的密碼(MD5加密) ,時間,IP
39         SummerBase.BLL.find_password_log bllFind = new SummerBase.BLL.find_password_log();
40         SummerBase.Model.find_password_log modelFind = new SummerBase.Model.find_password_log();
41         if (modelFind != null)
42         {
43             modelFind.Md5 = MFunction.Md5New(key).ToString();
44             modelFind.CreateTime = SummerBase.Utils.Util.TimeToUnixTimes(DateTime.Now.ToString());
45             modelFind.IP = Page.Request.UserHostAddress;
46 
47             time = modelFind.CreateTime;
48             key = modelFind.Md5;
49         }
50         bllFind.Add(modelFind);
51 
52     }
53 
54 
55   //發送郵件代碼
56  public static void Sends(string email, string formto, string content, string body, string upass)
57     {
58         string name = "no_reply@xxxx.com";
59 
60         string smtp = "smtp.exmail.sina.com";
61 
62         SmtpClient _smtpClient = new SmtpClient();
63         _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定電子郵件發送方式
64         _smtpClient.Host = smtp; //指定SMTP服務器
65         _smtpClient.Credentials = new System.Net.NetworkCredential(name, upass);//用戶名和密碼
66         MailMessage _mailMessage = new MailMessage();
67         //發件人,發件人名 
68         _mailMessage.From = new MailAddress(formto, "xxxx公司");
69         //收件人 
70         _mailMessage.To.Add(email);
71         _mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
72         _mailMessage.Subject = content;//主題
73 
74         _mailMessage.Body = body;//內容
75         _mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文編碼
76         _mailMessage.IsBodyHtml = true;//設置為HTML格式
77         _mailMessage.Priority = MailPriority.High;//優先級   
78         try
79         {
80             _smtpClient.Send(_mailMessage);
81         }
82         catch (Exception)
83         {
84 
85         }
86     }
87 
88 二,修改密碼頁。
89 
90 這個很簡單咯,代碼就沒貼出來
91 1根據接受的參數和數據中添加的參數進行比較,如果驗證通過,就修改密碼,如果驗證失敗則給出提示,重新發送郵件。

 


免責聲明!

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



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