嵌入 HTML 电子邮件图像






4.74/5 (9投票s)
2005 年 9 月 26 日
2分钟阅读

239727

1237
如何在电子邮件新闻通讯中嵌入图片。
您需要下载的其他项目
引言
如何将图片嵌入到电子邮件中;简单明了,但它仅此而已。
背景
我妹妹想发送一封电子邮件新闻通讯,并希望嵌入图片。所以,她问了一个朋友,他们给她发了一些经典的 ASP 代码。然后她让我把它弄好。当然!我启动了 VS 2003,并获取了 MIL HTML 解析器 和 DotNetOpenMail。在一个小时内,我做了一个小应用程序,它可以获取一个网页,添加所有需要的图片,并将 img
标签更改为指向附加到电子邮件的图片的内容 ID,然后将其发送到电子邮件地址。
使用代码
这段代码非常简单明了。只需选择您创建的 HTML 文件,添加主题、"发件人"电子邮件地址、"收件人"电子邮件地址以及 SMTP 服务器名称或 IP 地址,然后单击发送。但是这段代码做了什么呢?好吧,你找不到比这更简单的了。代码会获取所有 img
元素。
// 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);
}
}
}
}
然后,将所有需要的图片附加到邮件中,并将 img
元素的 src
属性设置为附加图片的 Content ID。
// 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);
}
然后,更改后的 HTML 将添加到电子邮件消息中并发送出去。
// set the email text to the changes html
emailMessage.HtmlPart = new HtmlAttachment(document.HTML);
emailMessage.Send(new SmtpServer(this.SmtpServerTextBox.Text));
关注点
我只是在一个小时内编写了这段代码。事实上,编写这篇文章又花了 30 分钟。所以,这段代码并非最佳实践的典范。我只是想以最少的麻烦将图片嵌入到电子邮件中,并且通过这段代码实现了这个目标。我希望其他人会觉得它有用。
历史
- 2007/5/6 - 版本 2.0
- 2005/9/27 - 版本 1.0 - 同时也碰巧是我的生日! :D