【发布时间】:2019-01-24 19:26:12
【问题描述】:
我能够正确地将 jpg 图像转换为 base64String。但我无法使用转换后的图像字符串和 LinkedResource 将其嵌入到电子邮件正文中。该图像在电子邮件正文中显示为“未找到图像”图标。 任何帮助将不胜感激。
我已按照此链接中的示例进行操作:Iterate through an html string to find all img tags and replace the src attribute values
我正在使用 HtmlAgilityPack(nuget 包)通过以下代码定位 img 元素。
private string embedImageInMail(string html)
{
HtmlAgilityPack.HtmlDocument doc = new
HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
doc.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);
currentSrcValue = currentSrcValue.Split(',')[1]; //Base64 part of string
byte[] imageData = Convert.FromBase64String(currentSrcValue);
string contentId = Guid.NewGuid().ToString();
using (MemoryStream ms = new MemoryStream(imageData))
{
LinkedResource inline = new LinkedResource(ms, "image/jpeg");
inline.ContentId = contentId;
inline.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
x.SetAttributeValue("src", "cid:" + inline.ContentId);
}
});
return doc.DocumentNode.OuterHtml;
}
传递给函数的 html 参数包含一个 img 标签,其 src 等于图像的 base64 编码。 从此函数返回的内容被分配给电子邮件的 message.body。
【问题讨论】:
标签: c# image-processing base64 system.net.mail