Skip to main content
Email Password   helpLost your password?

Other projects you will need to download

Screenshot - PSH_Ne2.png

Introduction

How to embed images into an email; short and sweet, but this is all this does.

Background

My sister wanted to send out an email newsletter and wanted to embed images. So, she asked a friend and they sent her some classic ASP code. Then she asked me to make it work. Yeah, right! I fired up VS 2003 and got a hold of MIL HTML Parser and DotNetOpenMail. Within an hour, I had a small little app that could take a webpage, add all the needed images, and change the img tags to point to the content IDs of the images attached to the email and send it off to an email address.

Using the code

This code is really straightforward. Just select an HTML file that you have created, add a subject, a "from" email address, a "to" email address and the SMTP server name or IP address, and then click Send. But what does the code do? Well, you can't get much simpler than this. The code goes off and gets all the img elements.

    // Get All the img nodes

    GetImageNodes(document.Nodes);
    private void GetImageNodes(HtmlNodeCollection nodes)
    {
        foreach (HtmlNode node in nodes)
        {
            HtmlElement element = node as HtmlElement;
            if (element != null)
            {
                if (element.Name.ToLower() == "img")
                {
                    imageNodes.Add(element);
                }
                if (element.Nodes.Count > 0)
                {
                    GetImageNodes(element.Nodes);
                }
            }
        }
    }

Then all the needed images are attached and the src attributes of the img elements are set to the content ID of the attached images.

    // Change all the img nodes

    foreach (HtmlElement element in imageNodes)
    {
        FileInfo imageFileInfo = new FileInfo(Path.Combine(
            fileInfo.DirectoryName, 
            element.Attributes["src"].Value));
        string contentId = 
            imageFileInfo.Name.Replace(imageFileInfo.Extension, 
            string.Empty);

        if (!images.ContainsKey(element.Attributes["src"].Value))
        {
            // Add Image to the Email

            images.Add(
                element.Attributes["src"].Value, imageFileInfo.FullName);
            FileAttachment relatedFileAttachment = 
                           new FileAttachment(imageFileInfo, contentId);
            if ((imageFileInfo.Extension == ".jpg") || 
                (imageFileInfo.Extension == ".jpeg"))
            {
                relatedFileAttachment.ContentType = "image/jpeg";
            }
            else if (imageFileInfo.Extension == ".gif")
            {
                relatedFileAttachment.ContentType = "image/gif";
            }
            emailMessage.AddRelatedAttachment(relatedFileAttachment);
        }

        //Change the src to "cid:<CONTENTID>"

        element.Attributes["src"].Value = string.Format("cid:{0}", contentId);

    }

And then the changed HTML is added to the email message and sent off.

    // set the email text to the changes html

    emailMessage.HtmlPart = new HtmlAttachment(document.HTML);

    emailMessage.Send(new SmtpServer(this.SmtpServerTextBox.Text));

Points of interest

I just slapped this code together in an hour. In fact, writing the article added another 30 minutes. So, this is not code to look to for best practices. I just wanted to embed images into an email with a minimum of hassle and I achieved that goal with this. I hope others will find it useful.

History

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
QuestionSPAM problem Pin
pinokar
6:57 2 Jul '07  
AnswerRe: SPAM problem Pin
mwdiablo
13:42 19 Jul '07  
GeneralYou can also... Pin
axelriet
14:47 5 Jun '07  
GeneralRe: You can also... Pin
mwdiablo
17:53 9 Jun '07  
GeneralAn Easy Way... Pin
merlin981
10:14 5 Jun '07  
GeneralRe: An Easy Way... Pin
mwdiablo
13:43 19 Jul '07  
Questionproblem creating NewsLetter.... Pin
mohnish.bilimoria
23:52 31 May '07  
Generaldon't want to use SmtpServer for sending newsletter Pin
farooqahm
2:21 14 May '07  
GeneralRe: don't want to use SmtpServer for sending newsletter Pin
mwdiablo
23:50 20 May '07  
GeneralimageNodes error Pin
Skip67
7:41 10 Dec '06  
GeneralRe: imageNodes error Pin
mwdiablo
23:48 20 May '07  
GeneralEmbedd Flash Pin
SaarDagan
4:20 22 Nov '06  
GeneralRe: Embedd Flash Pin
mwdiablo
23:47 20 May '07  
Generalcodsys.dll Pin
jbrathwaite
19:52 9 Aug '06  
AnswerRe: codsys.dll Pin
mwdiablo
22:55 9 Aug '06  
Generalhelp Pin
beckymasue
5:16 1 Aug '06  
AnswerRe: help Pin
mwdiablo
14:39 1 Aug '06  
Questionbackground images Pin
tianmingkun
1:02 23 May '06  
AnswerRe: background images Pin
mwdiablo
16:56 4 Jun '06  
Generalthanks Pin
drkwtkns
7:47 4 Oct '05  
GeneralRe: thanks Pin
mwdiablo
10:44 4 Oct '05  
Generaleven birthday to me.... Pin
jreddy
17:37 26 Sep '05  
GeneralRe: even birthday to me.... Pin
mwdiablo
1:05 27 Sep '05  
GeneralPNG? Pin
The_Mega_ZZTer
15:50 26 Sep '05  
GeneralRe: PNG? Pin
mwdiablo
1:12 27 Sep '05  


Last Updated 5 Jun 2007 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009