65.9K
CodeProject 正在变化。 阅读更多。
Home

嵌入 HTML 电子邮件图像

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (9投票s)

2005 年 9 月 26 日

2分钟阅读

viewsIcon

239727

downloadIcon

1237

如何在电子邮件新闻通讯中嵌入图片。

您需要下载的其他项目

Screenshot - PSH_Ne2.png

引言

如何将图片嵌入到电子邮件中;简单明了,但它仅此而已。

背景

我妹妹想发送一封电子邮件新闻通讯,并希望嵌入图片。所以,她问了一个朋友,他们给她发了一些经典的 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
© . All rights reserved.