Я могу правильно преобразовать изображение jpg в base64String. Но у меня возникают проблемы с использованием этой преобразованной строки изображения и LinkedResource для встраивания ее в тело письма. Изображение появляется в виде значка не найденного изображения в теле письма.
Любая помощь будет принята с благодарностью.
Я следовал примеру по этой ссылке: Выполните итерацию по строке html, чтобы найти все теги img и заменить значения атрибута src
Я использую 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 письма.