CreateMail function:
private MailMessage CreateMail(EmailArchive emailArchive, bool useCCAddress, bool isBodyHtml)
{
MailMessage mailMsg = new MailMessage();
// From
MailAddress mailAddress = new MailAddress(emailArchive.FromAddress, emailArchive.FromName);
mailMsg.From = mailAddress;
// Subject and Body
mailMsg.Subject = emailArchive.Subject;
//mailMsg.Body = emailArchive.Body;
EmbedImages(mailMsg, emailArchive.Body);
mailMsg.IsBodyHtml = isBodyHtml;
// To
if (useCCAddress)
{
if (string.IsNullOrEmpty(emailArchive.CCAddress))
mailMsg = null;
else
mailMsg.To.Add(new MailAddress(emailArchive.CCAddress, emailArchive.CCName));
}
else
{
mailMsg.To.Add(new MailAddress(emailArchive.ToAddress, emailArchive.ToName));
}
return mailMsg;
}
The following pattern will match all img tag in the html source code:
string pattern = "<img.+?src=\"(.+?)\".+?/?>";
EmbedImages function:
///
/// The function only deal with src like "/image/file.jpg"
///
///
///
public static void EmbedImages(MailMessage mailMessage, string body)
{
// Check config file
string path = ConfigurationManager.AppSettings["WebSiteRootFolder"];
AlternateView av;
if (string.IsNullOrEmpty(path))
{
ShopLogging.Warn("Can not find [WebSiteRootFolder] setting in config file!!!");
//path = "D:\\User\\up\\";
av = AlternateView.CreateAlternateViewFromString(string.Format("{0}", body), null, MediaTypeNames.Text.Html);
mailMessage.AlternateViews.Add(av);
return;
}
if (path.Right(1) == "\\")
path = path.Left(path.Length - 1);
List links = new List();
LinkedResource res;
string file, id, ext, cid;
int i = 1;
// Find all image tag
//
string pattern = "";
body = Regex.Replace(body, pattern, delegate(Match tag)
{
string v = tag.Value;
file = tag.Groups[1].Value;
// The function only deal with src like "/image/file.jpg"
// If the src is not absolute path to "/", skip
if (file.Left(1) != "/")
return v;
// Replace virtual path to physical path
file = file.Replace('/', '\\');
ext = Path.GetExtension(file);
if (ext.Left(1) == ".")
ext = ext.Substring(1);
// Generate mail path ID
id = Path.GetFileName(file);
id = i.ToString() + "_" + id.UrlClean().Replace('.', '_');
// Add root folder
if (file.Left(1) == "\\")
file = file.Substring(1);
file = path + "\\" + file;
cid = string.Format("cid:{0}", id);
// Add Linked Recource
res = new LinkedResource(file, string.Format("image/{0}", ext));
res.ContentId = id;
links.Add(res);
//body = body.Replace(tag.Groups[1].Value, string.Format("cid:{0}", id));
i++;
v = v.Replace(tag.Groups[1].Value, cid);
return v;
});
av = AlternateView.CreateAlternateViewFromString(string.Format("{0}", body), null, MediaTypeNames.Text.Html);
links.ForEach(l => av.LinkedResources.Add(l));
mailMessage.AlternateViews.Add(av);
}