In the article
Masking Your Email Address, we went over why you would want to hide your email address inside the source code of an HTML document, but still make it visible to the
human readers of that page.
Encapsulating the code into a single .NET user control is ideal for protecting email addresses for ASP.NET sites.
Step 1 - Create a Web User Control
Add an asp:Literal control to that page.
<asp:Literal ID="ltEmail" runat="server" />
Step 2 - Jump to the Code Behind
The EmailMask code follows. Note the name of the class
lab_maskemail_EmailMask was created by Visual Studio for me. Use whatever name you like or Visual Studio recommends here. The rest of the code should be the same. This code is for ASP.NET 2.0.
using System;
using System.Text;
using System.Web;
public partial class lab_maskemail_EmailMask : System.Web.UI.UserControl
{
private string emailAddress;
public string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
private string visibleAddress;
public string VisibleAddress
{
get
{
// if unassigned return emailAddress
if (visibleAddress==null || visibleAddress.Length == 0)
{
return emailAddress;
}
else
{
return visibleAddress;
}
}
set { visibleAddress = value; }
}
private string mouseoverTag;
public string MouseoverTag
{
get { return mouseoverTag; }
set { mouseoverTag = value; }
}
private string subject;
public string Subject
{
get { return subject; }
set { subject = value; }
}
private string cssClass;
public string CssClass
{
get { return cssClass;}
set { cssClass = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
// The MIN required for control is an email address, confirm it exists
if (emailAddress == null || emailAddress.Length == 0)
{
ltEmail.Text = "Assign EmailAddress to Control";
return;
}
// Build ASCII encoded Link
StringBuilder asciiLink = new StringBuilder();
asciiLink.Append("<a href=\"mailto:");
asciiLink.Append(ASCIIEncode(EmailAddress));
if(subject != null && subject.Length > 0 )
{
asciiLink.Append("?subject=" + subject);
}
asciiLink.Append("\"");
if (mouseoverTag != null && mouseoverTag.Length > 0)
{
asciiLink.Append(" title=\"" + mouseoverTag + "\"");
}
if (cssClass !=null && cssClass.Length > 0)
{
asciiLink.Append(" class=\"" + cssClass + "\"");
}
asciiLink.Append(">");
asciiLink.Append(ASCIIEncode(VisibleAddress));
asciiLink.Append("</a>");
ltEmail.Text = asciiLink.ToString();
}
protected string ASCIIEncode(string regularText)
{
regularText = regularText.Trim();
StringBuilder encodeSB = new StringBuilder();
char regularLetter;
for (int j = 0; j < regularText.Length; j++)
{
// peel off 1 character at a time
regularLetter = regularText[j];
encodeSB.Append("&#" + Convert.ToInt32(regularLetter).ToString() + ";");
}
return encodeSB.ToString();
}
Step 3 - Create a Test Page
Register the control at the top using whatever path and naming convention you've chosen.
<%@ Register Src="~/lab/maskemail/EmailMask.ascx" TagName="EmailMask" TagPrefix="dc" %>
Inside the ASP.NET page and control is used like below.
<dc:EmailMask ID="eMask"
CssClass="Summer"
EmailAddress="larryKing@cnn.com"
VisibleAddress="Email Larry King"
MouseoverTag="Send feedback"
Subject="Tonight's Show"
runat="server" />
Labels: ASP.NET, Csharp, Email