这是一次偶然的机会,跟公司的业务聊了下他们大概的需求,其中有一点用户需要邮箱验证去注册自己的账户;对于还没有接触过这块的我来说,产生了浓厚的兴趣,于是乎研究了下。想到了两种方法:一种是程序产生比较简单的验证码直接发送到邮箱,用户手动填写验证码进行验证完成注册;
另外一种(还未研究)
要实现邮箱激活其实就是解决服务器上发邮件的问题,用户注册后,把用户状态默认成未激活,然后生成一个链接到一个页面,在那个页面加载时运行一个SQl语句把用户状态改成激活,然后再跳转到什么成功激活的页面就可以了,当然要传递一些有效的参数了;邮件激活的话就给注册时用户填写的邮箱发信就可以了,内容里面写上那个自动生成链接,怎么发邮件呢,建议你使用第三方控件Jmail不错,当然还有别的,如果用Smtp协议发的话20封左右就挂掉了···
第一种代码和流程图展示如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
MailAddress MessageFrom = new MailAddress("********@qq.com"); //发件人邮箱地址
string MessageTo = "*******@mccn.com.cn"; //收件人邮箱地址
string MessageSubject = "测试邮件发送"; //邮件主题
string StrRandom = GenCode(6);
System.Text.StringBuilder strBody = new System.Text.StringBuilder();
//strBody.Append("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
//strBody.Append("<a href='http://localhost:3210/Order/ActivePage?customerID=" + 11+ "&validataCode =" + 22 + "'>点击这里</a></br>");
strBody.Append("请填写您的验证码,48小时生效,否则重新注册账号,请尽快激活!</br>");
strBody.Append("验证码为:"+StrRandom);
string MessageBody = strBody.ToString();
if (Send(MessageFrom, MessageTo, MessageSubject, MessageBody))
{
Response.Write("发送邮件成功");
}
else
{
Response.Write("发送邮件失败");
}
}
/// <summary>
/// 发送电子邮件
/// </summary>
/// <param name="MessageFrom">发件人邮箱地址</param>
/// <param name="MessageTo">收件人邮箱地址</param>
/// <param name="MessageSubject">邮件主题</param>
/// <param name="MessageBody">邮件内容</param>
/// <returns></returns>
public bool Send(MailAddress MessageFrom, string MessageTo, string MessageSubject, string MessageBody)
{
MailMessage message = new MailMessage();
message.From = MessageFrom;
message.To.Add(MessageTo); //收件人邮箱地址可以是多个以实现群发
message.Subject = MessageSubject;
message.Body = MessageBody;
message.IsBodyHtml = true; //是否为html格式
message.Priority = MailPriority.High; //发送邮件的优先等级
SmtpClient sc = new SmtpClient();
sc.EnableSsl = true;
sc.UseDefaultCredentials = false;
sc.Host = "smtp.qq.com"; //指定发送邮件的服务器地址或IP
sc.Port = 25; //指定发送邮件端口
sc.Credentials = new System.Net.NetworkCredential("**********@qq.com", "suahdvaqmdrzbfhc"); //指定登录服务器的用户名和密码(发件人的邮箱登陆密码)
try
{
sc.Send(message); //发送邮件
}
catch(Exception ex)
{
return false;
}
return true;
}
/// <summary>
/// 产生随机字符串
/// </summary>
/// <param name="num">随机出几个字符</param>
/// <returns>随机出的字符串</returns>
private string GenCode(int num)
{
string str = "0123456789ABCDEFGHiJKLMNOPQRSTUVWXYZ";//图片上随机文字
char[] chastr = str.ToCharArray();
string code = "";
Random rd = new Random();
int i;
for (i = 0; i < num; i++)
{
code += str.Substring(rd.Next(0, str.Length), 1);
}
return code;
}
}
第二种流程图: