Create registration form and send confirmation email to new registered users in asp.net | Activate or approve user account by activation link in email address.
Description: The concept is
simple as mentioned below.
- First user will fill the form having Name, Email Id, Address and Contact Number field. This information will be stored in the Sql server database table where a field “Is_Approved” is set to 0 i.e. false by default.
- Also email id, and the user id based on email id is set in the query string parameters and sent to the email address of the newly registered user as an activation link.
- When user check his email and click on the activation link then he will be redirected to the "ActivateAccount.aspx" page where User id and email Id from the query string will be verified and the “Is_Approved” field in the sql server table is set to 1 i.e. True.
- Now he is an approved user and authorized to log in.
In previous related article i explained How to create Login page/form and check username,password in asp.net using sql server database and Create Change password form/page in asp.net using Sql server and Encrypt and decrypt username,password and store in Sql Server database and Create contact us form and Recover and reset the forgot password using activation link in email id and Check login in asp.net by passing parameter to stored procedure in sql server .
Implementation: let’s create an
asp.net web application to understand the concept.
Click on the image to enlarge |
Note: I have set the data type of
the Is_Approved field to bit and set its default value to 0 i.e. false. It means
whenever a new record is inserted in the table the “Is_Approved” will be 0. So
the new users need to get their account approved by clicking on the activation
link in their email address.
- In the web.config file create the connection string to connect your asp.net application to the Sql server database as:
<connectionStrings>
<add name="conStr" connectionString="Data Source=lalit;Initial Catalog=MyDataBase;Integrated
Security=True"/>
</connectionStrings>
Note: Replace the Data Source and Initial Catalog(i.e. DataBase Name) as per your application.
Source Code:
- Add a page and name it “Registration.aspx” and design the page as:
<div>
<fieldset style="width:350px;">
<legend>Registeration page</legend>
<table>
<tr>
<td>Name *: </td><td>
<asp:TextBox ID="txtName"
runat="server"></asp:TextBox><br /><asp:RequiredFieldValidator
ID="rfvName"
runat="server"
ErrorMessage="Please
enter Name"
ControlToValidate="txtName" Display="Dynamic" ForeColor="#FF3300"
SetFocusOnError="True"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td>Email Id: * </td><td>
<asp:TextBox ID="txtEmailId"
runat="server"></asp:TextBox><br />
<asp:RequiredFieldValidator
ID="rfvEmailId"
runat="server"
ControlToValidate="txtEmailId"
Display="Dynamic"
ErrorMessage="Please
enter Email Id" ForeColor="Red" SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator
ID="rgeEmailId"
runat="server"
ControlToValidate="txtEmailId"
Display="Dynamic"
ErrorMessage="Please
enter valid email id format" ForeColor="Red"
SetFocusOnError="True"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td>Address : </td><td>
<asp:TextBox ID="txtAddress"
runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Contact No.</td><td>
<asp:TextBox ID="txtContactNo"
runat="server"></asp:TextBox></td>
</tr>
<tr>
<td> </td><td>
<asp:Button ID="btnSubmit"
runat="server"
Text="Submit"
onclick="btnSubmit_Click"
/></td>
</tr>
</table>
</fieldset>
</div>
Note: I have also implemented the
validation on Name and the Email Id field to ensure they are not left blank
using RequiredFieldValidator validation control and also used RegularExpressionValidator to check for the valid email address on the Email Id field.
C#.Net Code for Registration.aspx
- In the code behind file (Registration.aspx.cs) write the code as:
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Text;
using System.Net;
using System.Net.Mail;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
protected void
btnSubmit_Click(object sender, EventArgs e)
{
MailMessage msg;
SqlCommand cmd = new
SqlCommand();
string ActivationUrl = string.Empty;
string emailId = string.Empty;
try
{
cmd = new SqlCommand("insert into Tb_Registration
(Name,EmailId,Address,ContactNo) values (@Name,@EmailId,@Address,@ContactNo)
", con);
cmd.Parameters.AddWithValue("@Name",
txtName.Text.Trim());
cmd.Parameters.AddWithValue("@EmailId",
txtEmailId.Text.Trim());
cmd.Parameters.AddWithValue("@Address",
txtAddress.Text.Trim());
cmd.Parameters.AddWithValue("@ContactNo",
txtContactNo.Text.Trim());
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
//Sending activation link in
the email
msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
emailId = txtEmailId.Text.Trim();
//sender email address
msg.From = new MailAddress("YourGmailEmailId@gmail.com");
//Receiver email address
msg.To.Add(emailId);
msg.Subject = "Confirmation email for
account activation";
//For testing replace the local host path with
your lost host path and while making online replace with your website domain
name
ActivationUrl = Server.HtmlEncode("http://localhost:8665/MySampleApplication/ActivateAccount.aspx?UserID="
+ FetchUserId(emailId) + "&EmailId="
+ emailId);
msg.Body = "Hi " +
txtName.Text.Trim() + "!\n" +
"Thanks for showing interest and
registring in <a href='http://www.webcodeexpert.com'> webcodeexpert.com<a>
" +
" Please <a href='" +
ActivationUrl + "'>click here to
activate</a> your account and
enjoy our services. \nThanks!";
msg.IsBodyHtml = true;
smtp.Credentials = new NetworkCredential("YourGmailEmailId@gmail.com",
"YourGmailPassword");
smtp.Port = 587;
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.Send(msg);
clear_controls();
ScriptManager.RegisterStartupScript(this, this.GetType(),
"Message", "alert('Confirmation Link to activate your account has been sent
to your email address');", true);
}
catch (Exception
ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(),
"Message", "alert('Error occured : " + ex.Message.ToString() + "');", true);
return;
}
finally
{
ActivationUrl = string.Empty;
emailId = string.Empty;
con.Close();
cmd.Dispose();
}
}
private string
FetchUserId(string emailId)
{
SqlCommand cmd = new
SqlCommand();
cmd = new SqlCommand("SELECT UserId FROM Tb_Registration WHERE
EmailId=@EmailId", con);
cmd.Parameters.AddWithValue("@EmailId",
emailId);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
string UserID = Convert.ToString(cmd.ExecuteScalar());
con.Close();
cmd.Dispose();
return
UserID;
}
private void
clear_controls()
{
txtName.Text = string.Empty;
txtEmailId.Text = string.Empty;
txtAddress.Text = string.Empty;
txtContactNo.Text = string.Empty;
txtName.Focus();
}
- Add a new page and name it “ActivateAccount.aspx”. This page will be opened when new registered user click on the activate account link in his email. On the page load it will check email id and user id from the query string and then update the "Is_Approved" column to 1 i.e. True. Then you can redirect him to your login page to log in.
Code for ActivateAccount.aspx
page
- In the code behind file (ActivateAccount.aspx.cs) write the code as:
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
protected void Page_Load(object
sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ActivateMyAccount();
}
}
private void
ActivateMyAccount()
{
SqlConnection con = new
SqlConnection();
SqlCommand cmd = new
SqlCommand();
try
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
if ((!string.IsNullOrEmpty(Request.QueryString["UserID"])) & (!string.IsNullOrEmpty(Request.QueryString["EmailId"])))
{ //approve
account by setting Is_Approved to 1 i.e. True in the sql server table
cmd = new SqlCommand("UPDATE Tb_Registration SET Is_Approved=1 WHERE
UserID=@UserID AND EmailId=@EmailId", con);
cmd.Parameters.AddWithValue("@UserID",
Request.QueryString["UserID"]);
cmd.Parameters.AddWithValue("@EmailId",
Request.QueryString["EmailId"]);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
Response.Write("You account has been
activated. You can <a href='Login.aspx'>Login</a> now! ");
}
}
catch (Exception
ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(),
"Message", "alert('Error occured : " + ex.Message.ToString() + "');", true);
return;
}
finally
{
con.Close();
cmd.Dispose();
}
}
VB.Net Section:
Source code of Registration.aspx
- Design the Registration.aspx page as in C#.Net section but replace the line <asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" />
With <asp:Button ID="btnSubmit" runat="server" Text="Submit" />
VB.Net Code for Registration.aspx
page
- In the code behind file (Registration.aspx.vb) write the code as:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Text
Imports System.Net
Imports System.Net.Mail
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("conStr").ConnectionString)
Protected Sub
btnSubmit_Click(sender As Object, e As System.EventArgs) Handles
btnSubmit.Click
Dim msg As MailMessage
Dim cmd As New SqlCommand()
Dim ActivationUrl As String = String.Empty
Dim emailId As String = String.Empty
Try
cmd = New SqlCommand("insert into Tb_Registration
(Name,EmailId,Address,ContactNo) values (@Name,@EmailId,@Address,@ContactNo)
", con)
cmd.Parameters.AddWithValue("@Name",
txtName.Text.Trim())
cmd.Parameters.AddWithValue("@EmailId",
txtEmailId.Text.Trim())
cmd.Parameters.AddWithValue("@Address",
txtAddress.Text.Trim())
cmd.Parameters.AddWithValue("@ContactNo",
txtContactNo.Text.Trim())
If con.State = ConnectionState.Closed
Then
con.Open()
End If
cmd.ExecuteNonQuery()
‘Sending
activation link in the email
msg = New MailMessage()
Dim smtp As
New SmtpClient()
emailId = txtEmailId.Text.Trim()
'sender email address
msg.From = New MailAddress("YourGmailEmailId@gmail.com")
'Receiver email address
msg.[To].Add(emailId)
msg.Subject = "Confirmation email for
account activation"
'For testing replace the local host path with
your lost host path and while making online replace with your website domain
name
ActivationUrl = Server.HtmlEncode("http://localhost:8665/MySampleApplication/ActivateAccount.aspx?UserID="
& FetchUserId(emailId) & "&EmailId="
& emailId)
msg.Body = "Hi " &
txtName.Text.Trim() & "!"
& vbLf & "Thanks for showing interest
and registring in <a href='http://www.webcodeexpert.com'>
webcodeexpert.com<a> " & "
Please <a href='" & ActivationUrl & "'>click here to activate</a> your account and enjoy our services. "
& vbLf & "Thanks!"
msg.IsBodyHtml = True
smtp.Credentials = New NetworkCredential("YourGmailEmailId@gmail.com",
"YourGmailPassword")
smtp.Port = 587
smtp.Host = "smtp.gmail.com"
smtp.EnableSsl = True
smtp.Send(msg)
clear_controls()
ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "Message", "alert('Confirmation
Link to activate account has been sent
to your email address');", True)
Catch ex As Exception
ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "Message", "alert('Error
occured : " & ex.Message.ToString() & "');", True)
Return
Finally
ActivationUrl = String.Empty
emailId = String.Empty
con.Close()
cmd.Dispose()
End Try
End Sub
Private Function
FetchUserId(emailId As String)
As String
Dim cmd As New SqlCommand()
cmd = New SqlCommand("SELECT UserId FROM Tb_Registration WHERE
EmailId=@EmailId", con)
cmd.Parameters.AddWithValue("@EmailId",
emailId)
If con.State
= ConnectionState.Closed Then
con.Open()
End If
Dim UserID As String = Convert.ToString(cmd.ExecuteScalar())
con.Close()
cmd.Dispose()
Return UserID
End Function
Private Sub clear_controls()
txtName.Text = String.Empty
txtEmailId.Text = String.Empty
txtAddress.Text = String.Empty
txtContactNo.Text = String.Empty
txtName.Focus()
End Sub
- Add a new page “ActivateAccount.aspx”. This page will be opened when new registered user click on the activate account link in his email. On the page load it will check email id and user id from the query string and then update the "Is_Approved" column to 1 i.e. True. Then you can redirect him to your login page to log in.
In the code behind file (ActivateAccount.aspx.vb)
and write the code on the page load event as:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Protected Sub Page_Load(sender As
Object, e As
System.EventArgs) Handles
Me.Load
If Not
Page.IsPostBack Then
ActivateMyAccount()
End If
End Sub
Private Sub ActivateMyAccount()
Dim con As New SqlConnection()
Dim cmd As New SqlCommand()
Try
con = New SqlConnection(ConfigurationManager.ConnectionStrings("conStr").ConnectionString)
If (Not String.IsNullOrEmpty(Request.QueryString("UserID"))) And
(Not String.IsNullOrEmpty(Request.QueryString("EmailId"))) Then
'approve account by setting Is_Approved to 1
i.e. True in the sql server table
cmd = New SqlCommand("UPDATE Tb_Registration SET Is_Approved=1 WHERE
UserID=@UserID AND EmailId=@EmailId", con)
cmd.Parameters.AddWithValue("@UserID",
Request.QueryString("UserID"))
cmd.Parameters.AddWithValue("@EmailId",
Request.QueryString("EmailId"))
If
con.State = ConnectionState.Closed Then
con.Open()
End If
cmd.ExecuteNonQuery()
Response.Write("You account has been
activated. You can <a href='Login.aspx'>Login</a> now! ")
End If
Catch ex As Exception
ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "Message", "alert('Error
occured : " & ex.Message.ToString() & "');", True)
Return
Finally
con.Close()
cmd.Dispose()
End Try
End Sub
Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
ReplyDeletejava代写