Sending HTML Mail with Embedded Image in .NET
page 5 of 10
by Soyuj Kumar Sahoo
Feedback
Average Rating: 
Views (Total / Last 10 Days): 63184/ 927

A simple HTML mail

Let us check a mail message created by System.Net.Mail.MailMessage to send a default mail.

Listing 1 – Sample for plain mail

Public Sub SendPlainMail()
 
  'create the mail message
  Dim mail As New MailMessage("from@fromdomain.com""to@todomain.com")
 
  'set the message content
  mail.Subject = "This is a plain text mail"
  mail.Body = "This is a sample body... for default Mail Clients.."
 
  'send the mail using SMTP Client
  Dim smtp As New SmtpClient("My Mail Server"'mail Server IP or NAME 
  smtp.Send(mail)
End Sub ' End SendPlainMail

Here, "mail" is the instance of MailMessage Class. There are four overloaded constructors available initializing different properties of MailMessage Class during making instance.

·         MailMessage (): Initializes an empty instance of the MailMessage class. 

·         MailMessage (from as MailAddress, to as MailAddress): Initializes a new instance of the   MailMessage class by using from and to as MailAddress class objects. 

·         MailMessage (from as String, to as String): Initializes a new instance of the MailMessage class by using from and to as String objects. 

·         MailMessage (from as String, to as String, subject as String, body as String): Initializes a new instance of the MailMessage class by using from, to, subject and body as String objects. 

Again, "smtp" is the instance of SmtpClient Class with Mail Server as parameter, which does the actual mail sending action. There are three available constructors of SmtpClient Class as:

·         SmtpClient (): Initializes a new instance of the SmtpClient class.

·         SmtpClient (host as String): Initializes a new instance of the SmtpClient class that sends email by using the specified SMTP server (host). 

·         SmtpClient (host as String, port as Int32): Initializes a new instance of the SmtpClient class that sends email by using the specified SMTP server and port. 

The MIME Source for above mail is:

Listing 2

'--------------------------------
x-recipient: <to@todomain.com>
Received: xxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx
(###### #, #, #, #); Fri, 22 Jun 07 18:53:37 +0530
mime-version: 1.0
from: from@fromdomain.com
to: to@todomain.com
date: 22 Jun 2007 18:53:37 +0530
subject: This is a plain text mail
content-type: text/plain; charset=us-ascii
content-transfer-encoding: quoted-printable
Message-Id: <f0706221908020DDAxxxxxx>
X-Antivirus: AVG for E-mail 7.5.472 [269.9.4/860]
This is a sample body... for default Mail Clients..
'--------------------------------

Here, the "content-type" field value is "text/plain," i.e. content-type: text/plain, which specifies that this Mail Client (Outlook or Eudora) is a plain mail only.

By default the mail message created by System.Net.Mail is a plain text, whose default value for   the Public Property MailMessage.IsBodyHtml is False. To format a message as Html we need to set this property MailMessage.IsBodyHtml property to True.

Listing 3 – Sample for HTML mail

Public Sub SendHtmlMail()
 
  'create the mail message
  Dim mail As New MailMessage("from@fromdomain.com""to@todomain.com")
 
   'set the message content
   mail.Subject = "This mail has Html Body.."
   mail.Body = "This is a sample body with html in it. <b>This is bold</b> <font
   color=#336699>This is blue</font>"
   mail.IsBodyHtml = True
   'send mail
   SendMail(mail)
End Sub ' End SendHtmlMail
 
Private Sub SendMail(ByVal mail As Mail.MailMessage)
  'send the message using SMTP client
  Dim smtp As New SmtpClient(_mailServer) 'mail Server IP or NAME
  smtp.Credentials = CredentialCache.DefaultNetworkCredentials
  smtp.Send(Mail)
End Sub ' End SendMail

The MIME Source for above mail is:

Listing 4 – Mime source of HTML mail

'--------------------------------
x-recipient: <to@todomain.com>
Received: xxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx
(###### #, #, #, #); Fri, 22 Jun 07 18:59:12 +0530
mime-version: 1.0
from: from@fromdomain.com
to: to@todomain.com
date: 22 Jun 2007 18:59:12 +0530
subject: This mail has Html Body..
content-type: text/html; charset=us-ascii
content-transfer-encoding: quoted-printable
Message-Id: <f0707041437531C0Axxxxxx>
X-Antivirus: AVG for E-mail 7.5.475 [269.9.4/860]
This is a sample body with html in it. <b>This is bold</b> 
<font color=3D#336699>This=is blue </font>
'--------------------------------

The "content-type" field value is "text/html" i.e. content-type: text/html, which specifies to the Mail Client (Outlook or Eudora) that this mail contains html content.


View Entire Article

Article Feedback

Title:  
Name:  
Url: ( Optional )
Comment:  
Please add 8 and 2 and type the answer here:

User Comments

Title: OWA, Hotmail, Yahoo and Googlemail   
Name: Pieter
Date: 10/7/2009 4:57:21 PM
Comment:
\
Title: OWA   
Name: Pieter
Date: 10/7/2009 3:55:53 PM
Comment:
My last comment did not include this line which breaks it for Exchange Web Access:
data.Name = "image2.jpg";

Sorry...
Title: Hotmail   
Name: Pieter
Date: 10/7/2009 3:34:16 PM
Comment:
Hi
Thanks for the GREAT post. After fighting a bit with the image displaying in Hotmail, I came up with this code which seems to make it work:
Attachment data = new Attachment(imageView.ContentStream, MediaTypeNames.Image.Gif);
data.ContentDisposition.Inline = true;
data.ContentId = "uniqueId";
data.TransferEncoding = TransferEncoding.Base64;
message.Attachments.Add(data);

Just use that instead of the message.AlternateViews.Add(imageView);

Hopefully this will help someone.
Title: So cool, thanks.   
Name: Richard
Date: 7/2/2009 2:56:31 PM
Comment:
In stead of sending the embedded image email, How can we save it into the .eml template file?
Title: this is good   
Name: Harish kanzariya
Date: 7/2/2009 1:37:12 AM
Comment:
hi
Title: Error by using this codes   
Name: Nelson
Date: 5/28/2009 10:53:20 PM
Comment:
dear friends
this is very useful for me, when i put this codes to my code it was getting error like follows

Type 'MailMessage' is not defined
i think i have done some mistake, please help me to solve this problem

Thanks in ADvanced
Dim mail As New MailMessage
Title: embedded Email   
Name: Suresh
Date: 5/18/2009 7:03:04 AM
Comment:
Very Good Code. Thanks
Title: Works well, both google and yahoo   
Name: Sangam Uprety
Date: 3/27/2009 8:48:30 AM
Comment:
Hi Soyuj!
Thanks for the descriptive tutorial.
This has worked for me smart!
I could get the images embedded in my mail which displayed well in google mail (gmail) and yahoo mail. But I could not test it now with hotmail.

The only problem is that I cannot get it displayed in the mail readers that use plain view. The result is awsome- the image link is being displayed, with cid:uniqueid as src of the image. Looks ugly.

With best regards,
Sangam Uprety
http://dotnetspidor.blogspot.com
Title: This code is faulty   
Name: Vlax
Date: 11/29/2008 11:28:08 PM
Comment:
Look for another example in the net.
The attached image doesn't come right, you need to use "relatedfiles" or something like that instead of creating a additional AlternateView
Title: Need urgent help   
Name: Gandhi Basnet
Date: 11/22/2008 11:16:37 PM
Comment:
The code is working good now,
but the problem is when ever i am sending mail
the word "spam" is getting added to the subject
like if i send test it is like spam test in the subject line when i receive the mail

please help me out

thanks
Title: Works on Outlook Express but not for Outlook 2007   
Name: Gandhi Basnet
Date: 11/20/2008 3:58:33 AM
Comment:
The embedded image is displayed in Outlook Express but not in Outlook 2007.
Please help me out.
Title: Thanks and a great job   
Name: Chris
Date: 11/10/2008 2:30:00 PM
Comment:
I work in C#, and know little of VB.NET, but your code is just great and understandable still.

Congratulations!
Title: need help urgent   
Name: Geani
Date: 10/27/2008 10:18:25 AM
Comment:
I used same code. The only difference is the location of the image to be loaded. But, Image doesn't display properly.
It shows just an icon at the place of image. could u help me
Title: need help urgent   
Name: Rahul
Date: 10/9/2008 7:29:35 AM
Comment:
It was a nice article.
But Image doesn't display properly.
it shows just a icon at the place of image
could u help me

Thanks
Title: need help -urgent   
Name: sunil
Date: 8/20/2008 12:25:16 AM
Comment:
i tried ur code its working good
but the problem is when ever i am sending mail
the word "spam" is getting added to the subject
like if i send test it is like spam test in the subject line when i receive the mail

please help me out

thanks
Title: great job   
Name: bunny
Date: 8/18/2008 10:16:20 PM
Comment:
great work thanq very much for the post
i was working with web.mail some i got some issue with that
and ur code its really wow
thaks once again
Title: Gr8 buddy   
Name: Ankit Maini
Date: 6/27/2008 6:35:42 AM
Comment:
Thanx buddy nice article for me.
Title: asdasd   
Name: fasd
Date: 5/19/2008 9:20:06 PM
Comment:
asdf
Title: Mr   
Name: Baklouti
Date: 5/12/2008 10:44:50 AM
Comment:
Merci pour cet exposé bien fait; je l'ai testé et ça marche; j'ai remarqué sur mon test deux petits points :
1- le message sur yahoo était bien reçu image et texte, mais sur outlook express implémenté sur xp, l'image est bien arrivée et les caractères accentués sont mal interprétés
2- le message reçu sur outlook implémenté sur vista, est classé comme courrier indésirable et l'image n'est pas parvenu
auriez vous quelques idées pour corriger la situation
Merci
Title: For Local Host   
Name: Prince Mathew
Date: 2/19/2008 11:23:33 PM
Comment:
Thanks a lot... it saved much time...
Found some settings is needed to send thru localhost as server. Link provided will help

http://codebetter.com/blogs/peter.van.ooijen/archive/2006/04/05/Using-localhost-as-mailserver-_2800_5.7.1-Unable-to-relay-for-xxx_2900_.aspx
Title: View message before sending   
Name: Jerre
Date: 1/30/2008 9:23:19 AM
Comment:
I there a way to view the message in outlook 2003 first before sending it?
Title: Thank You Very Much...   
Name: Slawek
Date: 12/15/2007 7:05:52 PM
Comment:
Your article helped me very, very much and saved me much time. I think, you could add an examle how to authenticate on smtp server using login/password (single line at the end of this comment), and article will be truly complete
Slawek

smtp.Credentials = new System.Net.NetworkCredential(login,password)
Title: Imran   
Name: Imran Ali
Date: 11/6/2007 10:56:14 AM
Comment:
Hello ... Thank you ,,, It is very helpful
Title: ThankxxX   
Name: Mohammed. Akhtar
Date: 8/29/2007 6:18:45 AM
Comment:
It was very useful.
Title: Thanx To You   
Name: Sai
Date: 8/10/2007 1:28:03 AM
Comment:
Hello Sir,

I got good idea from this article but i expecting to know how can i read mails came to me in my gmail account in my asp.net application using POP3 Access.
Title: Pankaj   
Name: Pankaj Baviskar
Date: 8/7/2007 9:18:21 AM
Comment:
\
\
Title: Very good work   
Name: Jose
Date: 8/7/2007 2:36:54 AM
Comment:
Thank you Soyuj for this very good work. Each step is very well explained. Good job!
Title: Thanks!   
Name: Oscar
Date: 8/6/2007 11:53:30 AM
Comment:
Thanks a lot Soyuj! i'll try it that way
Title: Hotmail issue..   
Name: Soyuj Kumar
Date: 8/6/2007 3:41:14 AM
Comment:
Hello Oscar,

I have already checked with LinkedResource class and it is working fine for Hotmail.... try this..

Thanks.

Soyuj
Title: I am trying   
Name: Soyuj Kumar
Date: 8/6/2007 3:20:24 AM
Comment:
Hi...

Thanks for this nice questions!!! I have tried with Yahoo, Gmail, Hotmail... but got failed in Hotmail to see the image.. Yahoo and Gmail supports...

Please check the message source in all the experimental cases.. hello Kevin check the Outlook's source if the image source is there then we need to do some R&D..

BTW, another possible way is to try this action using "LinkedResource" which will take the path of the image.. and then (AlternateView)htmlView.add(LinkedResource) ....

So, please try with this...

Thanks,
Soyuj
Title: Thank You!   
Name: amin behzadi
Date: 8/4/2007 3:57:15 AM
Comment:
Excelent...! Very nice and clear to understandig.
thank you!
Title: Question   
Name: Oscar
Date: 8/3/2007 11:20:02 AM
Comment:
Excelent code Soyuj!! i have a question..the example works fine if i see the mail message in gmail(i see the text and the image), but in msnHotmail(i see the text and a gray box instead of the image) in mozilla i only see the image..
What could be the problem? is there any special setup that we need to see this mail correclty??
Thanks a lot!!!
Title: Thank, another question ask   
Name: Kevin
Date: 8/3/2007 2:43:25 AM
Comment:
your code got worked in outlook express, failed in outlook.

in outlook, i just saw a red cross instead of the pic. Do you know why or have you tested it like that?

any ideas please feel free to contact me via kevins@verdant.com.au. thanks again.

Cheers,
Kevin
Title: Thanks   
Name: Soyuj Kumar
Date: 8/2/2007 8:54:49 AM
Comment:
Thanks !!! for these nice comments...
Title: Enjoyed your article   
Name: Patricia
Date: 8/1/2007 10:33:58 PM
Comment:
Your writing style makes it so clear to understand. Thank you and looking forward to more of your articles.
Title: Nice work   
Name: John
Date: 7/27/2007 3:29:23 AM
Comment:
Nice work man.. Keep it up !!!

Product Spotlight
Product Spotlight 






Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2009 ASPAlliance.com  |  Page Processed at 11/20/2009 10:15:24 PM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search