I have an asp.net web app to send emails, and I have tried to send an html file template. I can send my file, but the images from the template dont load on the message sent!
public void SendEmail(string EmailAddress)
{
try
{
MailMessage mail = new MailMessage();
mail.To.Add(EmailAddress);
mail.From = new MailAddress("[email protected]");
mail.Subject = txtSubject.Text;
string FilePath = Server.MapPath("templateHtml.html");
StreamReader str = new StreamReader(FilePath);
string body = str.ReadToEnd();
//string body = Server.HtmlEncode(str.ReadToEnd());
mail.IsBodyHtml = true;
mail.Body = body;
SmtpClient smtp = new SmtpClient();
smtp.Host = smtpClient;
smtp.Credentials = new NetworkCredential(email, password);
smtp.EnableSsl = true;
smtp.Send(mail);
str.Close();
Response.Write("ok!")
}
catch
{
Response.Write("so bad");
}
}
…
My htmltemplate is like:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<br />
<p>This is an image</p>
<img src="Images/image1.jpg">
<p>This is an image</p>
<img src="http://localhost:1114/WebBody/Images/image2.jpg">
<p>image from net</p>
<img src="https://cdn.mos.cms.futurecdn.net/FVqUjfbiHS9imyJiRiM53-970-80.jpg.webp" width="40%">
</body>
</html>
…
When I send this html file, just the last image is loaded.
Any ideas?
2
Answers
There are two ways, one is to upload the image to the server to make it public, the other is to encode the image to base64.
I will show the second method here.
First, Choose a
transcoding website
(website), Encoding the image to base64.Second, Use:
in your template html.
Then the image will load in email.
the first image is not in public, it’s in your local IISExpress only. The recipient has no access to this address "//localhost:1114/WebBody/Images/image2.jpg". You need to put it in public host such as some image hosting, or upload it to a IIS directory if in you’re in intranet environment.
This one is obviously in public domain
https://cdn.mos.cms.futurecdn.net/FVqUjfbiHS9imyJiRiM53-970-80.jpg.webp