发送邮件,找回密码的功能
发送邮件找回密码功能(分析加实例)(如有错误请指出,谢谢)
分析:
大致思路就是发送邮件→连接邮件里的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根据接受的参数和数据中添加的参数进行比较,如果验证通过,就修改密码,如果验证失败则给出提示,重新发送邮件。