首页 > 解决方案 > 需要用链接资源替换 html 中的嵌套图像,以便可以通过电子邮件发送

问题描述

我正在使用 WYSWYG 编辑器制作 html,然后通过电子邮件发送。但是当我将图像粘贴到电子邮件正文中时,图像不会显示在电子邮件中。所以根据建议,我尝试将所有 img 标签 src 转换为链接资源,如下所示:

var htmlString = "<ul><li class='ql - indent - 1'>Testing Body Text</li></ul><p>Helllloz</p><p><br></p><p><br></p><p><br></p><p><img src='data: image / png; base64,iVBORw0KGgoAAAANSUhEUgAAASUAAADWCAYAAACXFpR0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAO8SURBVHhe7dhLcpsAEEBBkfvfmUgVuRLHBWjhEs9M90ZsNTCPz7Le3QAifj1 / ARJECUgRJSBFlIAUUQJSRAlIESUgRZSAFFECUkQJSBElIEWUgBRRAlJECUgRJSBFlIAUUQJSRAlIESUgRZSAFFECUkQJSBElIEWUgBRRAlJECUgRJSBFlIAUUQJSRAlIESUgRZSAFFECUkQJSBElIEWUgBRRAlJECUgRJSBFlIAUUQJSRAlIESUgRZSAFFECUkQJSBElIEWUgBRRAlJECUgRJSBFlIAUUQJSRAlIESUgZVnvnsdELcvyPLoulyEfRClqQoi2uCRnE6WYyTH6n0tzJt + UQgTps8c8zGQeUYqwfNvMZhavbyd7deGufJrMgH + J0smOFnLa6TEPROlEews4 / bSYzVy + KZ3E0u3bm8HR0xQ / myidQJBeI0wziVKIIH1lJvOI0ptt3eEt37at2XhauiZRAlJEKcBT0jEzmkOU3sjrxvcz0 + sRpZN5AnidWc0gSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIoonWxZlucRR8xqBlF6o3Vdn0d8FzO9HlECUkQpwGvJMTOaQ5TebOt1w9Jt25qNV7drEqUQYfrKTOYRpRPs3eEt4V97s / CUdF2idBJh2idIc4lS1GMpJ8bp6H8L0vWJ0oleWbApcZryPzm23BfDrSfAQu5zmc7hSSnC0m0zm1lEKcTyffaYh5nMI0oxFvEPM5jLN6UfYML3JpchH0QJSPH6BqSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEpIgSkCJKQIooASmiBKSIEpAiSkCKKAEpogSkiBKQIkpAiigBKaIEhNxuvwEkqqSEml3B0AAAAABJRU5ErkJggg == '></p>";

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

        nodes.ForEach(x =>
                        {
                            string currentSrcValue = x.GetAttributeValue("src", null);
                            currentSrcValue = currentSrcValue.Split(',')[1];//Base64 part of string
                             byte[] imageData = Convert.FromBase64String(currentSrcValue);
                            string contentId = Guid.NewGuid().ToString();
                            LinkedResource inline = new LinkedResource(new MemoryStream(imageData), "image/png");
                            inline.ContentId = contentId;
                            inline.TransferEncoding = TransferEncoding.Base64;

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


        string result = document.DocumentNode.OuterHtml;

        System.IO.File.WriteAllText(@"F:\testimage.html", result);

当我看到 html 文件时,图像也没有显示。我正在使用 htmlagilitypack 包替换图像。

有人可以建议吗?

标签: c#htmlhtml-agility-pack

解决方案


推荐阅读