zoukankan      html  css  js  c++  java
  • .NET MVC 4 实现邮箱激活账户功能

    这篇文章是《.NET MVC 4 实现用户注册功能》的后续开发,实现发送激活链接到注册用户邮箱,用户在邮箱打开链接后激活账户的功能

    首先实现发送邮件的功能,在管理用户注册的controller中新增一个class MailService:

     1 using System.Net.Mail;
     2 
     3 public class MailService
     4     {
     5         /// <summary>
     6         /// 发送邮件
     7         /// </summary>
     8         /// <param name="target">收件人</param>
     9         /// <param name="title">邮件标题</param>
    10         /// <param name="content">邮件正文</param>
    11         public void SendMail(string target,string title,string content)
    12         {
    13             MailMessage mailMessage = new MailMessage();
    14             SmtpClient client = new SmtpClient();
    15 
    16             //设置编码,否则接收到的邮件会是乱码
    17             mailMessage.To.Add(new MailAddress(target, target.ToString(), Encoding.UTF8));
    18 
    19             //标题
    20             mailMessage.Subject = title;
    21             mailMessage.SubjectEncoding = Encoding.UTF8;
    22 
    23             //正文
    24             mailMessage.Body = content;
    25             mailMessage.BodyEncoding = Encoding.UTF8;
    26 
    27             //是否允许html
    28             mailMessage.IsBodyHtml = true;
    29 
    30             //优先级
    31             mailMessage.Priority = MailPriority.Normal;
    32             
    33             //同步发送
    34             client.Send(mailMessage);
    35         }
    View Code

    用户注册成功后,会跳转到一个提示注册成功的新页,在这个页面里调用刚才的发送邮件方法。

     1 public ActionResult RegSuccess()
     2         {
     3             string username = Session["username"].ToString();
     4             if (username == null)
     5             {
     6                 return View("~/Views/Account/Register.cshtml");
     7             }
     8  
     9             //生成激活码
    10             string code = Guid.NewGuid().ToString("N");
    11 
    12             //找到刚才注册成功的用户
    13             var result = db.userInfo.Where(a =>
    14                 a.UserName == username).SingleOrDefault();
    15 
    16             //将生成的激活码保存到数据库对应的用户上
    17             result.ActiveCode = code;
    18 
    19             db.SaveChanges();
    20 
    21             //邮件正文
    22             string content = "<a href='http://"+Request.Url.Host+":"+Request.Url.Port+"/Account/Active/"+result.UserID+"/"+code+"'>请点击激活您的账户</a>";
    23 
    24             MailService ms = new MailService();
    25             ms.SendMail(result.UserEmail, "测试", content);
    26 
    27             return View();
    28         }
    View Code

    不过只是这样邮件还不能发送成功,因为还缺少相应的smtp配置,在web.config中添加如下代码(这里使用的是163邮箱),填上作为发件人的邮箱和163邮箱服务器的端口号:

    <system.net>
        <mailSettings>
          <smtp deliveryMethod="Network" from="youremail@163.com">
            <network defaultCredentials="false" host="smtp.163.com" port="25" userName="youremailusername" password="*****"/>
          </smtp>
        </mailSettings>
    </system.net>

    测试一下上面的发送邮件功能,如果配置正确,应该可以成功发送邮件了,如果有错误,检查一下防火墙和邮箱服务器的配置。

    下面应该处理用户收到激活邮件并点击里面的链接来激活账户后的工作。

    这里采用 /Account/Active/userid/activecode 这个路由来处理。

    首先在路由里添加一个新的路由:

    1 routes.MapRoute(
    2                 name:"ActiveCode",
    3                 url:"{controller}/{action}/{userid}/{activecode}",
    4                 constraints:new { userid= @"d+",activecode = @"[a-zA-Z0-9]+" },
    5                 defaults: new { controller = "Account", action = "Active" }
    6             );
    View Code

    然后在controller里添加一个action:

     1 [HttpGet]
     2 //注意这里的参数名userid必须和路由里constraints一样,否则会接收不到参数
     3         public ActionResult Active(int userid,string activecode)
     4         {
     5             var result = db.userInfo.Where(a => a.UserID == userid).SingleOrDefault();
     6 
     7             //匹配数据库中的激活码
     8             if(result.ActiveCode.Equals(activecode))
     9             {
    10                 result.IsActived = 1;
    11                 db.SaveChanges();
    12 
    13                 return RedirectToAction("Index", "Home");
    14             }
    15 
    16             return View("~/Views/Account/RegSuccess.cshtml");
    17         }
    View Code

    至此,发送激活邮件的基本功能就完成了,不过这只是最基本的功能,正常情况下还应该处理用户超时没有点击链接,销毁激活码的工作,发送邮件时应该采用异步发送等等。

  • 相关阅读:
    利用cookie改变背景色
    AsyncResult
    元组Tuple
    子查询和高效分页
    事务
    健康亮黄灯 疾病有信号
    每天学点舒压减压秘诀
    药房里买得到的传世名方:新版
    电子设备热循环和振动故障预防
    LED照明应用基础与实践
  • 原文地址:https://www.cnblogs.com/undefined000/p/5090039.html
Copyright © 2011-2022 走看看