这篇文章是《.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. java 自定义log类

    目录机构如下: package tpf.common; import org.apache.log4j.*; import java.io.File; import java.net.URL; pub ...

  2. 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  3. 计算机图形——OpenGL

    荒废了太久,趁着"寒假"死磕了两周,验证了不少想法,解开了不少疑惑,代码质量当然是没有的,一切只为看到结果. 有空了再写每一项的细节. 源码地址 2019/5/12 更新 延迟渲染 ...

  4. configure: error: C++ preprocessor "/lib/cpp" fails sanity check

    configure: error: C++ preprocessor "/lib/cpp" fails sanity check 参考链接: error: C++ preproce ...

  5. LeetCode OJ--Subsets II

    https://oj.leetcode.com/problems/subsets-ii/ 求一个集合的子集,但集合中有重复元素. 求子集的问题,对应着数的二进制,相当于对二进制的一个遍历. #incl ...

  6. Vue.js实战:初识Vue.js

    一.Vue.js是什么 简单小巧的核心,渐进式技术栈,足以应付任何规模的应用. 简单小巧指的是Vue.js 压缩后大小仅有17KB 所谓渐进式(Progressive)就是你一步一步,有阶段性地来使用 ...

  7. Win10下 tensorflow gpu版安装

    准备: 系统环境: windows10 + Anaconda3 + Pycharm (1)环境配置: 打开Anaconda Prompt,输入清华仓库镜像,这样更新会快一些: 输入: conda co ...

  8. guava之cache

    转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = Cach ...

  9. Classical method of machine learning

    PCA principal components analysis kmeans bayes spectral clustering svm EM hidden Markov models deep ...

  10. expect实现自动分发密钥、网站度量术语

    1.优化ssh命令 sed -ir '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\n UseDNS no\nGSSAPIAu ...