如何通过运行时电子邮件正文嵌入图片

时间:2017-01-11 06:11:44

标签: c# model-view-controller

我们正在尝试通过将图像放在邮件正文中来发送电子邮件。但是它没有显示在收到的电子邮件中。我的代码将图像附加到我的电子邮件正文。请帮我解决问题。

 string Body = mainContent.ToString();
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Body.ToString(), null, "text/html");

            HtmlDocument document = new HtmlDocument();
            document.LoadHtml(Body);
            document.DocumentNode.Descendants("img")
                                .Where(e =>
                                {
                                    string src = e.GetAttributeValue("src", null) ?? "";
                                    return !string.IsNullOrEmpty(src) && !src.StartsWith("data:image");
                                })
                                .ToList()
                                .ForEach(x =>
                                {
                                    string currentSrcValue = x.GetAttributeValue("src", null);

                                    string contentId = Guid.NewGuid().ToString();
                                    LinkedResource inline = new LinkedResource(System.Web.Hosting.HostingEnvironment.MapPath("~"+currentSrcValue));
                                    inline.ContentId = contentId;
                                    inline.TransferEncoding = TransferEncoding.Base64;

                                    x.SetAttributeValue("src", "cid:" + inline.ContentId);
                                    htmlView.LinkedResources.Add(inline); 
                                });


            string result = document.DocumentNode.OuterHtml;


            mail.IsBodyHtml = true;
            htmlView = AlternateView.CreateAlternateViewFromString(result.ToString(), null, "text/html");
            mail.AlternateViews.Add(htmlView);

1 个答案:

答案 0 :(得分:0)

构建电子邮件的另一个选择是使用 RazorEngine (您必须在项目中安装它)。

您可以拥有以下内容:

mail.Body = Razor.Parse(param1, param2);

其中param1是cshtml的路径,param2代表模型。

通过在模型属性中保留图像的路径,您甚至可以为每封电子邮件创建特定的图片。

度过美好的一天!