ASP.NET MVC通过发送邮件激活注册用户

来源:互联网 发布:淘宝客推广链接点击数 编辑:程序博客网 时间:2024/05/16 01:36

1) 建一个发送邮件的通用类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Text;

/// <summary>
///发送邮件类
/// </summary>
public class MailService
{
    /// <summary>
    /// 发送邮件的方法
    /// </summary>
    /// <param name="toMail">目的邮件地址</param>
    /// <param name="title">发送邮件的标题</param>
    /// <param name="content">发送邮件的内容</param>
    public void SendMail(string toMail,string title, string content)

    {

        MailMessage  mailMessage = new MailMessage();

        SmtpClient client= new SmtpClient();
         //收件人邮箱地址
        //第一个参数是发信人邮件地址
        //第二参数是发信人显示的名称
        //第三个参数是 第二个参数所使用的编码,如果指定不正确,则对方收到后显示乱码
        mailMessage.To.Add(new MailAddress(toMail,toMail.ToString(),Encoding.UTF8));
        //邮件标题编码
        mailMessage.SubjectEncoding = Encoding.UTF8;
        //邮件主题
        mailMessage.Subject = title;
        //邮件内容
        mailMessage.Body = content;
        //邮件内容编码
        mailMessage.BodyEncoding = Encoding.UTF8;

        //设置正文内容是否是包含Html的格式
        mailMessage.IsBodyHtml = true ;
        //发送邮件的优先等级(有效值为High,Low,Normal)
        mailMessage.Priority = MailPriority.Normal;
        client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
        //发送邮件
        //client.Send(mailMessage);   //同步发送
        client.SendAsync(mailMessage, mailMessage.To); //异步发送 (异步发送时页面上要加上Async="true" )
    }

    void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {

        if (e.Cancelled)
        {
            System.Web.HttpContext.Current.Response.Write("<script>alert('Sending of email message was cancelled.');</script>");
        }
         if (e.Error == null)
        {
            System.Web.HttpContext.Current.Response.Write("<script>alert('Mail sent successfully');</script>");
         }
        else
        {
            System.Web.HttpContext.Current.Response.Write("<script>alert('Error occured, info=" + e.Error.Message + "');</script>");
        }

    }

   }

2) 在web.config里配置代码:

web.config的配置:

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="your email address">
        <network defaultCredentials="false" host="your eamil ip" port="端口号" userName="your email name" password="your email password"/>
      </smtp>
    </mailSettings>
  </system.net>

 

3) Controller的代码:

       [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult AddUser(User user)
        {
            //激活码
            string code = Guid.NewGuid().ToString("N");
            userService.AddUser(user,code);
            string content = System.IO.File.ReadAllText(Server.MapPath("~/NewMemberEmail.txt"));
            content = content.Replace("[Name]", user.LoginId);
            content = content.Replace("[LINK]", "<a href='http://" + Request.Url.Host + ":" + Request.Url.Port + "/User/Activation-" + Server.UrlEncode(user.LoginId) + "-" + code + "'>激活注册用户</a>");
            content = content.Replace("[UserName]", user.LoginId);
            content = content.Replace("[Pwd]", user.LoginPass);
            mailService.SendMail(user.email,"测试",content);
            return View("Login");
        }

         /// <summary>
        /// 处理激活
        /// </summary>
        /// <param name="id">用户登录id</param>
        /// <param name="code">激活码</param>
        /// <returns></returns>
        public ActionResult Activation(string id,string code)
        {
            string content="";
            if (userService.ActivateUser(id, code))
            {
                content="<script>alert('激活成功');window.close();</script>;";
            }
            else
            {
                content = "<script>alert('激活失败');window.close();</script>;";
            }
            return Content(content);
        }

4) NewMemberEmail.txt的内容:

亲爱的 [Name],

请点击以下链接激活来激活你的帐号。

[LINK]

用户名: [UserName]
密码: [Pwd]

感谢您注册成为我们的一员。

 

5) 修改数据库的业务方法:

      public bool ActivateUser(string loginId,string code)
        {
            User user = GetUser(loginId); //根据登录ID查出用户信息
            if (user!=null)
            {
                if (user.code.Equals(code))
                {
                    user.type = "激活";
                    Entities.SaveChanges();
                    return true;
                }
            }
            return false;

        }

6) 在Global.asax.cs里添加如下代码:

      routes.MapRoute(
               "Mail",                                             
               "User/Activation-{id}-{code}",                          
               new { controller = "User", action = "Activation", id = "", code = "" } 
           );