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

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

 using System.Net.Mail;

 public class MailService
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="target">收件人</param>
/// <param name="title">邮件标题</param>
/// <param name="content">邮件正文</param>
public void SendMail(string target,string title,string content)
{
MailMessage mailMessage = new MailMessage();
SmtpClient client = new SmtpClient(); //设置编码,否则接收到的邮件会是乱码
mailMessage.To.Add(new MailAddress(target, target.ToString(), Encoding.UTF8)); //标题
mailMessage.Subject = title;
mailMessage.SubjectEncoding = Encoding.UTF8; //正文
mailMessage.Body = content;
mailMessage.BodyEncoding = Encoding.UTF8; //是否允许html
mailMessage.IsBodyHtml = true; //优先级
mailMessage.Priority = MailPriority.Normal; //同步发送
client.Send(mailMessage);
}

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

 public ActionResult RegSuccess()
{
string username = Session["username"].ToString();
if (username == null)
{
return View("~/Views/Account/Register.cshtml");
} //生成激活码
string code = Guid.NewGuid().ToString("N"); //找到刚才注册成功的用户
var result = db.userInfo.Where(a =>
a.UserName == username).SingleOrDefault(); //将生成的激活码保存到数据库对应的用户上
result.ActiveCode = code; db.SaveChanges(); //邮件正文
string content = "<a href='http://"+Request.Url.Host+":"+Request.Url.Port+"/Account/Active/"+result.UserID+"/"+code+"'>请点击激活您的账户</a>"; MailService ms = new MailService();
ms.SendMail(result.UserEmail, "测试", content); return View();
}

不过只是这样邮件还不能发送成功,因为还缺少相应的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 这个路由来处理。

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

 routes.MapRoute(
name:"ActiveCode",
url:"{controller}/{action}/{userid}/{activecode}",
constraints:new { userid= @"\d+",activecode = @"[a-zA-Z0-9]+" },
defaults: new { controller = "Account", action = "Active" }
);

然后在controller里添加一个action:

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

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

.NET MVC 4 实现邮箱激活账户功能的更多相关文章

  1. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  2. DEDECMS会员注册如何配置邮箱发送邮件功能

    网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能?   1:配置dedecms网站发信EMAI ...

  3. discuz3.2x增加邮箱验证功能

    为防止垃圾用户多次注册,为disczu增加邮箱验证功能. 大致分为二步: 1.申请邮箱,这里推荐使用腾讯免费企业邮箱:https://exmail.qq.com/portal/introducefre ...

  4. 为ASP.NET MVC应用程序使用高级功能

    为ASP.NET MVC应用程序使用高级功能 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译, ...

  5. ASP.NET MVC应用程序实现下载功能

    ASP.NET MVC应用程序实现下载功能 上次Insus.NET有在MVC应用程序实现了上传文件的功能<MVC应用程序显示上传的图片> http://www.cnblogs.com/in ...

  6. php实现邮箱激活功能

    php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 <?php header( ...

  7. Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能

    Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能 开篇 现在的网站基本都有邮件注册功能,毕竟可以通过邮件定期的给用户发送一些 垃圾邮件 精选推荐

  8. 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)

    在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...

  9. asp.net mvc 注册中的邮箱激活功能实现(一)

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来 public ActionResult SendEmial() { ; string validataCode = System.Guid ...

随机推荐

  1. scrapy之spiders

    官方文档:https://docs.scrapy.org/en/latest/topics/spiders.html# 一句话总结:spider是定义爬取的动作(是否跟进新的链接)及分析网页结构(提取 ...

  2. 洛谷P1469找筷子

    题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX ...

  3. 洛谷 P 1514 引水入城==Codevs 1066

    题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...

  4. 【CF1028B】Unnatural Conditions(构造)

    题意:给定n与m,要求构造两个长度不超过2230的数字x,y使得x,y各自的数位和>=n,x+y的数位和<=n 思路: #include<cstdio> #include< ...

  5. SqlServer-1

    参考:https://blog.csdn.net/qq_29413829/article/details/80077550 安装sqlServer2012:https://blog.csdn.net/ ...

  6. 新华三孟丹:NFV资源池实现中的技术探讨

    近日,在第三届未来网络发展大会SDN/NFV技术与应用创新分论坛上,新华三解决方案部架构师孟丹女士发表了主题为<NFV资源池实现中的技术探讨>的主题演讲. 孟丹指出,新华三的NFV核心理念 ...

  7. CDOJ_149 解救小Q

    原题网址:http://acm.uestc.edu.cn/#/problem/show/149 小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她. 迷宫里面有一些陷阱,一旦走到陷阱里,就会 ...

  8. Tarjan缩点+DAG图dp

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  9. Ext grid中单元格编辑,editor为combobox时用法

    { header: 'TO_PTN_NM', dataIndex: "TO_PTN_NM", sortable: true, renderer: function (v, m, r ...

  10. 321. Create Maximum Number

    /* * 321. Create Maximum Number * 2016-7-6 by Mingyang */ public int[] maxNumber(int[] nums1, int[] ...