1. 程式人生 > >C#實現發送郵件找回密碼功能

C#實現發送郵件找回密碼功能

保存 bject ESS () 裏的 輸入框 鏈接地址 添加 dpa

首先我們來分析一下思路:

三步走:

1.先要發送郵件

2.讓用戶點擊郵件裏的URL

3.實現修改密碼

1.為了保證安全性,需要生成發送到郵件的URL,主要參數(用戶名,過期時間,key(key 需要在每次運行是自動生成隨機碼), IP等等) 然後將URL發送到郵箱。

2.保存發送的參數(建議保存在數據庫)

3.解析url:首先根據用戶名從數據庫中查找出密鑰key和過期時間,沒有則表示該請求 是偽造的或者過期的,然後驗證簽名,驗證過期時間,都驗證通過,就可以修改密碼, 密碼修改完以後,刪除數據庫中的記錄。

二、具體代碼實現

分為發送郵箱頁面和修改密碼頁面:
一.發送郵箱頁面
string strUserName = txtUserName.Value.Trim();
string strEail = txtEmail.Value.Trim();
//生成隨機密碼
string rand = "";
Random ramPwd = new Random();
string pwd = ramPwd.Next(100000, 9999999).ToString();
rand = pwd;
string key = rand + strName + email + "Base";


if (!string.IsNullOrEmpty(strUserName) && !string.IsNullOrEmpty(strEail))
{
//發送郵件
StringBuilder sb = new StringBuilder();
sb.Append("親愛的" + strUserName + "您好:<br/><br/>");
sb.Append("點擊以下鏈接設置新密碼。<br/><br/>");
sb.Append("<a href =\"http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + "\">http://www.xxxx.com/findpwd.aspx?key=" + key + "&time=" + time + " </a><br/><br/>");
sb.Append("(如果無法點擊該URL鏈接地址,請將它復制並粘帖到瀏覽器的地址輸入框,然後單擊回車即可。)<br/><br/>");
sb.Append("註意:請您在收到郵件24小時內使用,否則該鏈接將會失效。<br/><br/>");
sb.Append("我們將一如既往、熱忱的為您服務!<br/><br/>");
string MessageBody = sb.ToString();
Sends(strEail, "[email protected]", "xxxx--找回密碼", MessageBody, "123456");

//向find_password_log表添加數據
AddFindPassword(strUserName, strEail,key);

Response.Write("<script>alert(‘郵件已發送到你的郵箱,請註意查收!‘);location.href=‘/‘;</script>");

}
}


//向表find_password_log中添加數據
private void AddFindPassword(string strName, string email, string key)
{
//向find_password_log表中插入隨機生成的密碼(MD5加密) ,時間,IP
SummerBase.BLL.find_password_log bllFind = new SummerBase.BLL.find_password_log();
SummerBase.Model.find_password_log modelFind = new SummerBase.Model.find_password_log();
if (modelFind != null)
{
modelFind.Md5 = MFunction.Md5New(key).ToString();
modelFind.CreateTime = SummerBase.Utils.Util.TimeToUnixTimes(DateTime.Now.ToString());
modelFind.IP = Page.Request.UserHostAddress;

time = modelFind.CreateTime;
key = modelFind.Md5;
}
bllFind.Add(modelFind);

}


//發送郵件代碼
public static void Sends(string email, string formto, string content, string body, string upass)
{
string name = "[email protected]";

string smtp = "smtp.exmail.sina.com";

SmtpClient _smtpClient = new SmtpClient();
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定電子郵件發送方式
_smtpClient.Host = smtp; //指定SMTP服務器
_smtpClient.Credentials = new System.Net.NetworkCredential(name, upass);//用戶名和密碼
MailMessage _mailMessage = new MailMessage();
//發件人,發件人名
_mailMessage.From = new MailAddress(formto, "xxxx公司");
//收件人
_mailMessage.To.Add(email);
_mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
_mailMessage.Subject = content;//主題

_mailMessage.Body = body;//內容
_mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文編碼
_mailMessage.IsBodyHtml = true;//設置為HTML格式
_mailMessage.Priority = MailPriority.High;//優先級
try
{
_smtpClient.Send(_mailMessage);
}
catch (Exception)
{

}
}

二、修改密碼

根據接受的參數和數據中添加的參數進行比較,如果驗證通過,就修改密碼,如果驗證失敗則給出提示,重新發送郵件。

具體參數講解:
public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
{
System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);
client.UseDefaultCredentials = false;
client.Credentials =
new System.Net.NetworkCredential(strFrom, strFromPass);
client.DeliveryMethod = SmtpDeliveryMethod.Network;

System.Net.Mail.MailMessage message =
new MailMessage(strFrom, strto, strSubject, strBody);
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
client.Send(message);
}
第一個參數如果是163郵箱就寫smtp.163.com
第二個參數發件人的帳號
第三個參數發件人密碼
第四個參數收件人帳號
第五個參數主題
第六個參數內容.

發送郵箱,主要是調用了一個方法:

public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody) {

//簡單郵件傳輸協議(simple mail transfer protocol)SMTP(簡單郵件傳輸協議)是3Gpp多媒體消息規範中業務互通接口MM4使用的承載協議

//目前在網內多媒體消息業務系統的部署中都使用了該接口的承載協議

System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);

client.UseDefaultCredentials = false;//是否隨請求一起發送

client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);//獲取或設置驗證發件人的身份的憑據

client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定如何處理待發的郵件t//電子郵件通過網絡發送到SMTP服務器

System.Net.Mail.MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody); //表示說程序可以使用

//--System.Net.Mail.SmtpClient(表示應用程序可以使用簡單郵件傳輸協議來發送í電子郵件)的類發送電子郵件

message.BodyEncoding = System.Text.Encoding.UTF8;//設置郵件編碼為字符編碼

message.IsBodyHtml = true;//設置指示郵件正文的值是否為Html格式的值

client.Send(message);//將指定的郵件發送到STMP服務器以便傳遞

}

涉及參數講解:

// 第一個參數如果是163郵箱就寫smtp.163.com ,使用的服務 string strSmtpServer = "smtp.qq.com";

//發件人賬號 string strFrom = "[email protected]";

//發件人密碼 string strFromPass = "chen15993920970";

//給誰發 string strto = "[email protected]";

//所發主題 string strSubject = "哼哼";

//所發內容 string strBody = "您的驗證碼是:" + yanzhengma;



C#實現發送郵件找回密碼功能