这篇文章是《.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. [转] Makefile 基础 (5) —— Makefile 使用变量

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  2. 谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解(转载)

    相关参考文章: 谈谈自己对REST.SOA.SOAP.RPC.ICE.ESB.BPM知识汇总及理解 微服务SOA架构与RPC远程过程调用 SOA和微服务架构的区别 SOA: 维基百科解释:SOA:面向 ...

  3. (超详细)使用git命令行将本地仓库代码上传到github或gitlab远程仓库

    (超详细)使用git命令行将本地仓库代码上传到github或gitlab远程仓库 本地创建了一个 xcode 工程项目,现通过 命令行 将该项目上传到 github 或者 gitlab 远程仓库,具体 ...

  4. javaweb学习总结(十)——HttpServletRequest对象(一)(转)

    (每天都会更新至少一篇以上,有兴趣的可以关注)转载自孤傲苍狼 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器 ...

  5. Codeforces663E. Binary Table

    $n \leq 20,m \leq 100000$的01矩阵,可整行整列01翻转,问最少剩几个1. 一个暴力的做法是枚举$2^n$种行翻转然后$m$列扫一遍.但其实在行翻转情况确定的情况下我们只关心两 ...

  6. vs nuget package control.

    关于nuget,貌似使用nuget获取的package会在项目解决方案根目录下面将所有download下来的依赖包存储下来,所以这里的package会是最后所有的引用所在,既然不自己维护dll库的位置 ...

  7. vue.js源码学习分享(三)

    /** * Mix properties into target object.//把多个属性插入目标的对象 */ function extend (to, _from) { for (var key ...

  8. html css的简单学习

    html css的简单学习 css的内边距:padding (auto.length.%)(顺序:上.右.下.左)padding-toppadding-leftpadding-rightpadding ...

  9. BZOJ3751 NOIP2014 解方程(Hash)

    题目链接  BZOJ3751 这道题的关键就是选取取模的质数. 我选了4个大概几万的质数,这样刚好不会T 然后统计答案的时候如果对于当前质数,产生了一个解. 那么对于那些对这个质数取模结果为这个数的数 ...

  10. 335. Self Crossing

    /* * 335. Self Crossing * 2016-7-10 by Mingyang */ // Categorize the self-crossing scenarios, there ...