آموزش و سورس نحوه ارسال لینک فعال سازی در Asp.Net
آموزش و سورس نحوه ارسال لینک فعال سازی در Asp.Net
یکی از مهمترین دلیل استفاده از لینک فعال سازی هنگام ثبت نام برای این است که کاربران ایمیل متبری را وارد کنند و همچنین بتوانیم بعدا اخبار سایت را برای کاربران بفرستیم و در نهایت زمانی که کاربران در ایمیل خود بر روی لینک اخبار کلیک می کنند رتبه سایت ما در موتورهای جستجو بالاتر می رود و در جستجو موتورهای جستجو در اول نمایش دهد.
برای ارسال لینک فعال سازی چندین روش وجود دارد که ما در اینجا به ساده ترین آن می پردازیم.
برای این کار ابتدا شما باید یک جدول برای ثبت نام در sql server طراحی کنید که به شکل زیر می باشد
برای این کار ما به یک صفحه ثبت نام نیازمندیم که می توانید آن را طراحی کنید ( ما این صفحه را با نام CS.aspx ساخته ایم که در فایل Zip قرار دارد.) شکل این صفحه به صورت زیر می باشد.
همانطور که مشاهده می کنید کاربر فرم را تکمیل کرده و بر روی دکمه ثبت نام کلیک می کند.
حال به توضیح کدهایی که بعد از کلیک بر روی دکمه ثبت نام اتفاق می افتد می پردازیم.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Configuration; using System.Data.SqlClient; using System.Net.Mail; using System.Net; public partial class CS : System.Web.UI.Page { #region کلیک ثبت نام protected void RegisterUser(object sender, EventArgs e) { string activationCode = Guid.NewGuid().ToString(); main main = new main(); main.Username = txtUsername.Text.Trim(); main.Password = txtPassword.Text; main.Email = txtEmail.Text; main.CreatedDate = System.DateTime.Now; main.EmailActivation = false; main.ActivationCode = activationCode; main.InsertUser(); SendActivationEmail(activationCode); string message = ""; message = "ثبت نام شما با موفیت انجام شد"; ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true); } #endregion #region متد ارسال لینک فعال شازی private void SendActivationEmail(string activationCode) { using (MailMessage mm = new MailMessage("info@iranganj.ir", txtEmail.Text)) { mm.Subject = "Account Activation"; string body = "Hello " + txtUsername.Text.Trim() + ","; body += "<br /><br />Please click the following link to activate your account"; body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>"; body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "</a>"; body += "<br /><br />Thanks"; mm.Body = body; mm.IsBodyHtml = true; SmtpClient smtp = new SmtpClient(); smtp.Host = "mail.iranganj.ir"; //smtp.EnableSsl = false; NetworkCredential NetworkCred = new NetworkCredential("info@iranganj.ir", "123"); smtp.UseDefaultCredentials = true; smtp.Credentials = NetworkCred; //smtp.Port = 587; smtp.Send(mm); } } #endregion }
همانطور که مشاهده می کنید ما از یک کلاس به نام Main نیز استفاده کرده ایم که کدهای آن به صورت زیر می باشد.
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Mail; using System.Web; using System.Data; using System.Data.SqlClient; public class main : connection { public string Username; public string Password; public string Email; public DateTime CreatedDate; public Boolean EmailActivation; public string ActivationCode; public main() { } #region متد ثبت اطلاعات کاربر در دیتابیس public void InsertUser() { objcomm.Connection = objconn; string sql = "Insert Into Users (Username,Password,Email,CreatedDate,EmailActivation,ActivationCode)"; sql += "values ('{0}','{1}','{2}','{3}','{4}','{5}')"; sql = string.Format(sql, Username, Password, Email, CreatedDate, EmailActivation, ActivationCode); objcomm.CommandText = sql; objconn.Open(); objcomm.ExecuteNonQuery(); objconn.Close(); } #endregion #region متد فعال سازی حساب کاربر public int ActiveUser(string activationCode) { int rowsAffected = 0; objcomm.Connection = objconn; objcomm.CommandText = "UPDATE Users SET EmailActivation=1 WHERE ActivationCode='" + activationCode + "'"; objconn.Open(); rowsAffected = objcomm.ExecuteNonQuery(); objconn.Close(); return rowsAffected; } #endregion }
ابتدا کدهای کلاس Main را توضیح می دهیم سپس به کدهای بالا می پردازیم.
همانطور که مشاهده می کنید مادر کلاس Main دو متد داریم یکی به نام InsertUser و دیگری به نام ActiveUser
کار متد InsertUser ثبت اطلاعات کاربر در پایگاه داده می باشد که برای این کار از دستور Insert ، SQL استفاده کرده ایم.
متد دوم ActiveUser می باشد در این متد ما یک ActivationCode دریافت می کنیم و سپس در پایگاه داده اگر این ActivationCode موجود باشد فیلد EmailActivation آن را برابر 1 قرار می دهیم. که دستور Update را استفاده کرده ایم.
حال به توضیح کدهای موجود در دکمه ثبت نام می پردازیم.
در ابتدا با استفاده از دستور
string activationCode = Guid.NewGuid().ToString();
یک ActivationCode تولید می کنیم. سپس در خط بعدی یک نمونه از کلاس Main ایجاد کرده ایم. و با استفاده از متغیرهایی که در کلاس Main تعریف کرده ایم مقادیر وارد شده در فرم را به کلاس مورد نظر ارسال می کنیم.
سپس متد InsertUser را با دستور main.InsertUser(); فراخوانی کرده ایم این متد را که در بالا توضیح دادیم و کار ثبت اطلاعات را در پایگاه داده انجام می دهد.
سپس در خط بعدی ما تابع SendAcivationEmail را فراخوانی کرده ایم که کدهای آن را در همان صفحه مشاهده می کنید. کار این تابع این است که ما در بالا یک ActivationCode تولید کردیم این کد را به تابع ارسال کرده و تابع بعد از دریافت این کد یک ایمیل حاوی کد فعال سازی را به ایمیل ثبت نامی طرف ارسال می کند. که کدهای آن را در این دو خط مشاهده می کنید.
body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>"; body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "</a>";
که در این دستورات همانطور که مشاهده می کنید ما در ابتدا آدرس صفحه ثبت نام که همان CS.aspx می باشد را نوشته ایم و سپس بعد از کلیک به صفحه ای که هدایت می شود را نوشته ایم که همان صفحه CS_Activation.aspx می باشد را به همراه ActivationCode ارسال کرده ایم.
حال کاربر ایمیلی را دریافت کرده که حاوی لینک فعال سازی می باشد.
حال به اتفاقاتی که بعد از کلیک بر روی لینک فعال سازی می افتد می پردازیم.
کاربر ایمیل خود را باز کرده و بر روی لینک فعال سازی کلیک می کند. هنگامی که بر روی لینک فعال سازی کلیک می کند کدهای موجود در صفحه CS_Activation.aspx.cs اجرا می شود که کدهای آن به صورت زیر می باشد.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Configuration; using System.Data.SqlClient; public partial class CS_Activation : System.Web.UI.Page { #region فرم لود فعال سازی حساب کاربری protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { string activationCode = !string.IsNullOrEmpty(Request.QueryString["ActivationCode"]) ? Request.QueryString["ActivationCode"] : Guid.Empty.ToString(); main main = new main(); if (main.ActiveUser(activationCode) == 1) { //main.ActiveUser(activationCode); string message = ""; message = "حساب شما فعال شد"; ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true); } else { string message = ""; message = "لینک فعال سازی نامتبر است"; ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true); } } } #endregion }
ActivationCode ای را که تولید کرده بودیم دریافت می کنیم سپس در خط بعدی یک نمونه از کلاس Main ایجاد می کنیم.
اگر به یاد داشته باشد ما در کلاس Main یک متدی به نام ActiveUser داشتیم که در بالا توضیح دادیم حال به ادامه توضیحات آن می پردازیم. شما هنگامی که یک دستور SQL را برای مثال در SQL Server اجرا می کنید برای مثال دستور Insert را به کار می برید وقتی که دستور Insert اجرا شد در پایان به شما می گوید
One Row Affected ، همانطور که در متد ActiveUser می بینید ما یک متغیر به نام rowsAffected تعریف کرده ایم و برابر صفر می باشد هنگامی که دستور Update انجام می گیرد ما دستور rowsAffected = objcomm.ExecuteNonQuery(); را به کار برده ایم که اگر دستور Update به درستی انجام شود rowsAffected برابر 1 می شود. که در پایان ما ان را با استفاده از دستور Return ارسال کرده ایم حال ما با استفاده از دستور شرطی if (main.ActiveUser(activationCode) == 1) چک می کینم که آیا متد activeUser عدد 1 را برگدانده است یا خیر اگر شرط درست باشد یعنی لینک فعال سازی معتبر بوده و حساب کاربری طرف فعال می شود وگرنه دستورات قسمت Else اجرا شده و پیغام می دهد که لینک فعال سازی معتبر نمیباشد.
نظر / سوال