码迷,mamicode.com
首页 > 其他好文 > 详细

通过邮件重置密码

时间:2014-12-07 01:18:02      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   ar   color   os   使用   

  • 目前大部分用户注册的密码都是使用MD5实现加密,而MD5加密确实不可逆的,若要解密MD5加密之后的数据,则使用碰撞的方法,不过效率太低,概率小,因此用户忘记密码之后只能通过重置新密码(!=找回密码)
    • 邮件找回密码前提:
      • 用户注册的时候必须进行邮箱验证;
    • 邮件找回密码流程:
      • 注册一个邮箱,用于给用户发邮件(相当于发件人);
      • 先输入用户名验证用户是否存在(用户名是唯一的);
      • 输入邮箱,根据用户名和邮箱验证用户的邮箱是否正确,若不正确则让用户重新输入,否则往下走;
      • 发送链接到用户邮箱,链接中存有key,过期时间;

代码实现(用户名的验证和邮箱的验证在这里就省略了,直接实现发邮件的代码):

  • Action的实现:
public JsonResult SendMail()
{
       string userName = Request.Params["userName"];
       string mail = Request.Params["mail"];
       //QQ邮箱时:674213371@qq.com  获取邮箱标注,类似于QQ,139,163,126
       string mailSign= mail.Substring(mail.IndexOf(@)+1, mail.IndexOf(.)-mail.IndexOf(@)-1);
       string MailAddr = MethodUtils.GetMailAddr(mailSign);//根据邮箱标注,获取相对应的邮箱登录地址(qq-http://www.mail.qq.com,139-http://www.10086.com)

       //判断邮件是否发送成功
       if (SendContent(userName, mail))
      {
             return Json(new { result = "1", MailAddr =MailAddr}); 
      }
      return Json(new { result = "0" });
}            
  • 邮件发送内容:
public bool SendContent(string userName, string email)
        {
            string rand = "";
            Random ramPwd = new Random();
            string pwd = ramPwd.Next(100000, 9999999).ToString();
            rand = pwd;
            string key = rand + userName + email + "Base";
            DateTime time = DateTime.Now;
       //对Key进行MD5加密 key
= PassWordEncryption.GetMd5(key + WebKey.EncryptKey); //邮件内容 StringBuilder sb = new StringBuilder(2000); sb.Append("亲爱的用户:<br/><br/>"); sb.Append("点击以下链接设置新密码。<br/><br/>"); sb.Append("<a href =\"http://www.域名.com/user/ReSetUserPassWord?key=" + key + "&time=" + (time.ToString("yyyy-MM-dd HH:mm:ss")) + "\">http://www.域名.com/user/ReSetUserPassWord?key=" + key + "&time=" + (time.ToString("yyyy-MM-dd HH:mm:ss")) + " </a><br/><br/>"); sb.Append("(如果无法点击该URL链接地址,请将它复制并粘帖到浏览器的地址输入框,然后单击回车即可。)<br/><br/>"); sb.Append("注意:请您在收到邮件<font style=‘color:red;font-weigth:border‘>1小时内</font>使用,否则该链接将会失效。<br/><br/>"); sb.Append("我们将一如既往、热忱的为您服务!<br/><br/>"); //判断邮件是否发送 if (!SendMessage(email, sb.ToString())) { return false; } UserFindPasswordLog userFindPassWordLogEntity = new UserFindPasswordLog() { UserName = userName, SecretKey = key, ExpirationTime = Convert.ToDateTime(time.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss")), IsDel=1 };
       //将链接中的Key,time,UserName存入数据库
var rv = this.BLLController.UserFindPasswordLogBLL.Insert(userFindPassWordLogEntity); if (rv.ReturnCode == 0) { return true; } return false; }
  • 发送邮件:
public bool SendMessage(string email,string messageBody)
        {
            string smtp = "smtp.163.com";

            SmtpClient _smtpClient = new SmtpClient();
            _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式
            _smtpClient.Host = smtp; //指定SMTP服务器
            _smtpClient.Credentials = new System.Net.NetworkCredential("(发件人邮箱)", "(发件人邮箱密码)");//用户名和密码
            MailMessage _mailMessage = new MailMessage();
            _mailMessage.From = new MailAddress("(发件人邮箱)", "(发件人名称)");
            //收件人 
            _mailMessage.To.Add(email);
            _mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
            _mailMessage.Subject ="密码重置";//主题

            _mailMessage.Body = messageBody;//内容
            _mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文编码
            _mailMessage.IsBodyHtml = true;//设置为HTML格式
            _mailMessage.Priority = MailPriority.High;//优先级,High为紧急邮件
            try
            {
         //发送邮件 _smtpClient.Send(_mailMessage); }
catch (Exception ex) { //日志 log.Title = ex.Message; log.Description = string.Format("{0}\r\n\tclass:{1},method:{2},line:{3}", ex.ToString(), this.GetType().Name, System.Reflection.MethodBase.GetCurrentMethod().Name, FilesUtils.GetLineNum()); log.Create(); return false; } return true; }

 到这里,邮件发送就实现了,不过值得注意的是,不要忘记开启发件邮箱的smtp/pop3/IMAP服务(以163邮箱为例)

bubuko.com,布布扣

通过邮件重置密码

标签:des   style   blog   http   io   ar   color   os   使用   

原文地址:http://www.cnblogs.com/QimmyPeng/p/4149024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!