ارسال ایمیل تایید کاربر پس از ثبت نام با لینک فعال سازی در Asp.Net

در این مقاله می خواهیم در مورد چگونگی ارسال ایمیل تایید کاربر بعد از ثبت نام به همراه لینک فعال سازی در asp.net صحبت کنیم، وقتی که کاربر ثبت نام کرد در سایت برای کاربر یک ایمیل به آدرس الکترونیکی فرستاده می شود که کاربر وقتی وارد ایمیل خود شد یک لینک فعال سازی دریاقت کرده که با زدن آن حساب کاربری خود را فعال می کند

ارسال ایمیل تایید کاربر پس از ثبت نام با لینک فعال سازی در Asp.Net

این مقاله در ادامه ی مقاله ی قبلی که در مورد ثبت نام کاربر در سایت بود قرار گرفته است، در این مقاله وقتی کاربر ثبت نام در سایت کرد یک ایمیل فعال سازی دریافت می کند که با زدن لینک فعال سازی حساب کاربری خود را فعال می کند.

یک جدول به نام UserActivation در پایگاه داده می سازیم.

ستون UserId کلید اصلی جدول می باشد و کلید خارجی (foreign key) جدول Users می باشد.

داخل رویداد صفحه کد ثبت نام کاربر را می نویسیم که وقتی کاربر ثبت نام کرد یک پیغام با عنوان اینکه

ایمیل فعال سازی برای شما ارسال شده است را نمایش خواهد داد.داخل این کد متد ارسال ایمیل صدا زده می شود.

protected void RegisterUser(object sender, EventArgs e)
{
    int userId = 0;
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("Insert_User"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
                cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim());
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim());
                cmd.Connection = con;
                con.Open();
                userId = Convert.ToInt32(cmd.ExecuteScalar());
                con.Close();
            }
        }
        string message = string.Empty;
        switch (userId)
        {
            case -1:
                message = "نام کاربری موجود می باشد";
                break;
            case -2:
                message = "آدرس الکترونکی موجود می باشد";
                break;
            default:
                message = "  ثبت نام با موفقیت انجام شد لینک قعال سازی به آدرس الکترونیکی شما ارسال شده است";
                SendActivationEmail(userId);
                break;
        }
        ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);
    }
}

در متد فعال سازی ایمیل یک کد فعال سازی که به روش Guid’s NewGuid درست شده است داخل جدول مان اضافه می شود.

یک ایمیل به همراه کد فعال سازی به آدرس ایمیل کاربر فرستاده می شود که یک لینک با یک کد که به صورت Query string در آدرس صفحه قرار می گیرد.


   protected void RegisterUser(object sender, EventArgs e)
        {
            int userId = 0;
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand("Insert_User"))
                {
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
                        cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim());
                        cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim());
                        cmd.Connection = con;
                        con.Open();
                        userId = Convert.ToInt32(cmd.ExecuteScalar());
                        con.Close();
                    }
                }
                string message = string.Empty;
                switch (userId)
                {
                    case -1:
                        message = "نام کاربری موجود می باشد لطفا نام کاربری جدیدی وارد نمایید";
                        break;
                    case -2:
                        message = "آدرس الکترونیکی موجود می باشد";
                        break;
                    default:
                        message = "ثبت نام با موفقیت انجام ایمیل فعال سازی فرستاده شد";
                        SendActivationEmail(userId);
                        break;
                }
                ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);
            }
        }

        private void SendActivationEmail(int userId)
        {
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            string activationCode = Guid.NewGuid().ToString();
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO UserActivation VALUES(@UserId, @ActivationCode)"))
                {
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.AddWithValue("@UserId", userId);
                        cmd.Parameters.AddWithValue("@ActivationCode", activationCode);
                        cmd.Connection = con;
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                    }
                }
            }
            using (MailMessage mm = new MailMessage("narjesesmaili001@gmail.com", txtEmail.Text))
            {
                mm.Subject = "Account Activation";
                string body = "سلام " + txtUsername.Text.Trim() + ",";
                body += "<br /><br />لطفا روی لینک کلیک کنید تا فعال سازی انجام شود";
                body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>برای فعال سازی حساب کاربری کلیک نمایید</a>";
                body += "<br /><br />با سپاس";
                mm.Body = body;
                mm.IsBodyHtml = true;
                SmtpClient smtp = new SmtpClient("smtp.gmail.com");
               smtp.EnableSsl = true;
                NetworkCredential NetworkCred = new NetworkCredential("narjesesmaili001@gmail.com", "1371210esmaili");
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
            
                smtp.Send(mm);
            }
        }

 

 

زمانی که کاربر لینک فعال سازی را دریافت کرد وارد یک صفحه می شود که اگر کاربر اعتبار داشته باشد، حساب کاربری آن فعال خواهد شد.

در صفحه ی Design UI قطعه کد زیر را می نویسیم که این کد پیغام وضعیت فعال بودن کاربر را نمایش می دهد.


<h1><asp:Literal ID="ltMessage" runat="server" /></h1>

داخل web config قطعه کد زیر را می نویسیم:


using System.Data;
using System.Configuration;
using System.Data.SqlClient;

داخل رویداد صفحه ی Page Load ، کد فعال سازی که از Query String بدست می آید.و کوئری حذف

روی جدول UserActivation اجرا می شود.

اگر کد فعال سازی معتبر است، رکورد حذف می شود و 1 را نشان می دهد، و یا کد فعال سازی معتبر نباشد یا کاربر فعال باشد هیچ رکوردی پاک نمی شود و 0 را بر می گرداند.

   protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                string activationCode = !string.IsNullOrEmpty(Request.QueryString["ActivationCode"]) ? Request.QueryString["ActivationCode"] : Guid.Empty.ToString();
                using (SqlConnection con = new SqlConnection(constr))
                {
                    using (SqlCommand cmd = new SqlCommand("DELETE FROM UserActivation WHERE ActivationCode = @ActivationCode"))
                    {
                        using (SqlDataAdapter sda = new SqlDataAdapter())
                        {
                            cmd.CommandType = CommandType.Text;
                            cmd.Parameters.AddWithValue("@ActivationCode", activationCode);
                            cmd.Connection = con;
                            con.Open();
                            int rowsAffected = cmd.ExecuteNonQuery();
                            con.Close();
                            if (rowsAffected == 1)
                            {
                                ltMessage.Text = "حساب کاربری با موفقیت فعال شد";
                            }
                            else
                            {
                                ltMessage.Text = "کد فعال سازی نامعتبر است";
                            }
                        }
                    }
                }
            }

        }

 

فایل های ضمیمه