shaprpuff Ответов: 1

Как я могу отправить встроенное изображение по электронной почте, имея строку в качестве изображения?


Я могу отправить изображение по электронной почте, сохраненное в папке изображений моего веб-приложения , но мой вопрос заключается в том, что у меня есть изображение в базе данных в строковом формате, как я могу отправить его по электронной почте?


Для отправки изображения в папку я использую следующий код:

LinkedResource logo = new LinkedResource(System.AppDomain.CurrentDomain.BaseDirectory + @"Images/logo.jpg");
logo.ContentId = "logo";
AlternateView av1 = AlternateView.CreateAlternateViewFromString("" + htmlTemplate, null, MediaTypeNames.Text.Html);

av1.LinkedResources.Add(logo);
message.AlternateViews.Add(av1);


Как отправить, если у меня есть изображение в строковом формате?

Что я уже пробовал:

я попытался заменить < img src=[abc]> любить,
htmlTemplate=htmlTemplate.Replace("[abc]", @"data:image/gif;base64," + software.SoftwareImage);  // does not worked

также пробовать
LinkedResource(@"data:image/gif;base64," + software.SoftwareImag);

//does not worked

Jochen Arndt

Похоже, что ваше изображение уже закодировано в base64. Затем просто получите его в виде строки из базы данных в локальную переменную.

Затем вы должны создать составную почту, где вы можете добавить изображение в качестве одной из частей, указав кодировку base64 и идентификатор содержимого. Этот идентификатор содержимого должен использоваться как < img src=cid:[the_id]>.

1 Ответов

Рейтинг:
12

Richard Deeming

Предположим, что ваше изображение-это Gif, хранящийся в виде строки Base64:

byte[] imageBytes = Convert.FromBase64String(software.SoftwareImag);
Stream contentStream = new MemoryStream(imageBytes);
LinkedResource image = new LinkedResource(contentStream, MediaTypeNames.Image.Gif);
image.ContentId = "software";

AlternateView av1 = AlternateView.CreateAlternateViewFromString(htmlTemplate, null, MediaTypeNames.Text.Html);
av1.LinkedResources.Add(image);
message.AlternateViews.Add(av1);

NB: Хранение изображения в базе данных в виде строки в кодировке Base64 отнимает много места. Вы должны либо хранить его с помощью двоичного типа, либо хранить изображение в файловой системе и просто хранить путь в базе данных.