Introduction
The article is about how to send an email with an image within its body and not as an attachment (like a company's logo).
The only possible solution is to format the body of the message as an "HTML" document. We will have to use the
.NET classes LinkedResource
and AlternateView
as merely setting the src
of the HTML <img>
tag won't help.
Background
Before going through this article, we need to have a basic understanding of ASP.NET 2.0 (and ofcourse, HTML).
Using the code
First of all, we need to import the namespace System.Net.Mail
. Then in the configSections
of the web.config file, add the following:
<appSettings>
<add key="SMTP" value="SMTP Address"/> //like mail.gmail.com
<add key="MailFrom" value="Mail From"/>
<add key="Port" value="Port Number"/> //usually 25
<add key="MailUserName" value="user name of the mail from which the mail will be sent"/>
<add key="MailPwd" value="Password"/>
<add key="To" value="To whom you're sending the mail"/>
<add key="CC" value="If there's any cc to add"/>
</appSettings>
Now in the .NET class file, write the following code. (Note that here we are not concerned about validations.)
MailMessage msg = new MailMessage();
string To, Cc;
string strMailContent = "You can include your text here";
To = ConfigurationManager.AppSettings["To"].ToString();
Cc = ConfigurationManager.AppSettings["CC"].ToString();
if (Cc != "" && Cc != String.Empty && Cc != null)
{
msg.CC.Add(Cc);
}
msg.To.Add(To);
msg.From = new MailAddress(ConfigurationManager.AppSettings["MailUserName"].ToString());
msg.Subject = sub;
string path = Server.MapPath(@"images/Logo.jpg");
LinkedResource logo = new LinkedResource(path);
logo.ContentId = "companylogo";
AlternateView av1 = AlternateView.CreateAlternateViewFromString(
"<html><body><img src=cid:companylogo/>" +
"<br></body></html>" + strMailContent,
null, MediaTypeNames.Text.Html);
av1.LinkedResources.Add(logo);
msg.AlternateViews.Add(av1);
msg.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = ConfigurationManager.AppSettings["SMTP"].ToString();
smtp.Port = Int32.Parse(ConfigurationManager.AppSettings["Port"]);
smtp.EnableSSL=true;
smtp.Credentials = new System.Net.NetworkCredential(
ConfigurationManager.AppSettings["MailUserName"].ToString(),
ConfigurationManager.AppSettings["MailPwd"].ToString());
smtp.Send(msg);
The LinkedResource
class represents an embedded external resource in an email attachment, such as an image in an
HTML attachment. More details.
The AlternateView
class represents the format to view an email message.
More details.
Points of Interest
In this way we can actually format the body of the message with other HTML properties also.
History
No updates yet.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.