這是一次偶然的機會,跟公司的業務聊了下他們大概的需求,其中有一點用戶需要郵箱驗證去註冊自己的賬戶;對於還沒有接觸過這塊的我來說,產生了濃厚的興趣,於是乎研究了下。想到了兩種方法:一種是程序產生比較簡單的驗證碼直接發送到郵箱,用戶手動填寫驗證碼進行驗證完成註冊;
另外一種(還未研究)
要實現郵箱激活其實就是解決服務器上發郵件的問題,用戶註冊後,把用戶狀態默認成未激活,然後生成一個鏈接到一個頁面,在那個頁面加載時運行一個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;
}
}
第二種流程圖: