Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Tagged as

Generating email address images to avoid spam on your site

, 29 Jan 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
Generating email address images to avoid spam on your site

Nowadays, you can't publish an email address anywhere without receiving a bunch of spam immediately after. Those spam web crawlers just search in every site looking for everything and anything that resembles an email address.

I very often see people use different variations of writing their email like "myname at mydomain.com" or "myname at mydomain dot com".
I don't think this covers it anymore...
The best way, in my opinion, is to create an image of the email address instead of writing it. (That's what Facebook does as well.)

I started working on a user based site, and the users' emails will be displayed throughout the site. So I created a class that will dynamically generate email address images for me so my precious users won't be so vulnerable to all the spam out there.

Here it is:

// Members //
private int _emailFontSize = 8;
private string _emailFontFamily = "Verdana";
private Brush _emailBackgroundColor = Brushes.White;
private Brush _emailFontColor = Brushes.Navy;
 
// Properties //
// I cut this out, just for convenience //
 
// Methods //
public void CreateEmailImage(string email)
{
      // create the font object
      Font myFont = new Font(_emailFontFamily, _emailFontSize);
             
      // create the image object
      Bitmap emailImage = new Bitmap((int)(myFont.SizeInPoints * email.Length), 
			myFont.Height);
 
      Graphics imgGraphics = Graphics.FromImage((Image)emailImage);
      imgGraphics.FillRectangle(_emailBackgroundColor, 
		new Rectangle(new Point(0, 0), emailImage.Size));
      imgGraphics.DrawString(email, myFont, _emailFontColor, new PointF(0, 0));
             
      // measure the actual size of the email string
      SizeF stringSize = imgGraphics.MeasureString(email, myFont);
             
      // crop the image we created
      Bitmap finalImage = CropImage(emailImage, 
		new Rectangle(new Point(0, 0), new Size((int)stringSize.Width,
                                    (int)stringSize.Height)));
 
      // save the image to a local file
      finalImage.Save(email + ".gif", ImageFormat.Gif);
  }
 
  private Bitmap CropImage(Image imgCrop, Rectangle cropArea)
  {
      Bitmap bmpImage = new Bitmap(cropArea.Width, cropArea.Height - 1);
      Graphics bmpG = Graphics.FromImage(bmpImage);
      bmpG.DrawImage(imgCrop, new Point(0, 0));
      return bmpImage;
  }
} 

I will probably make some changes before using this on my site:

  1. I don't think it's smart to give the file the name of the actual email address. I'll probably generate some unique ID but built from the users name.
  2. I haven't decided yet if I want the image to be a link to contact the user. If so, then I must create a unique id for each user, and have the link lead to that page with the unique id so I can identify the user being contacted.
  3. I'll probably add a simple caching mechanism to this, hence create a folder to store all the images, and then check if it exists before creating a new one each time.

Enjoy! Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Gilly Barr
Web Developer
Israel Israel
Started programming e-commerce sites with PHP & MySQL at the age of 14. Worked for me well for about 5 years.
 
Transfered to C# & asp.net, while serving in the IDF.
 
Currently working as a web developer for Sears Israel (SHC).
 
Check out my blog!

Comments and Discussions

 
QuestionTwice the usage of memory on both db and server Pinmemberwidnson7-Oct-12 22:55 
AnswerRe: Twice the usage of memory on both db and server PinmemberGilly Barr2-Feb-13 8:11 
QuestionNice work PinmemberUmair Feroze1-Feb-11 23:32 
AnswerRe: Nice work PinmemberGilly Barr9-Feb-11 10:40 
GeneralNot new!!! Pinmembershakil030400331-Jan-11 23:06 
GeneralRe: Not new!!! PinmemberGilly Barr1-Feb-11 13:07 
GeneralNice idea PinmemberLardus du Plessis31-Jan-11 19:21 
GeneralRe: Nice idea PinmemberGilly Barr1-Feb-11 13:03 
GeneralRe: Nice idea PinmemberGilly Barr9-Feb-11 10:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.141216.1 | Last Updated 29 Jan 2011
Article Copyright 2011 by Gilly Barr
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid