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 = "" }
);