sayana3 Ответов: 2

Добавьте несколько изображений в тело письма (встроенное)с помощью приложения c# windows


Я искал это несколько раз и нашел решения,но все они поддерживают только одно изображение.Наконец я использовал приведенный ниже код. Но та же проблема (т. е.),если html содержит более одного изображения, то только одно изображение отображается в теле, а остальные будут приходить как вложения.
string inputHtmlContent = htmlbody;
string outputHtmlContent = string.Empty;
var myResources = new List<LinkedResource>();

if ((!string.IsNullOrEmpty(inputHtmlContent)))
{
  var doc = new HtmlAgilityPack.HtmlDocument();
  doc.LoadHtml(inputHtmlContent);
  HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//img");
  if (nodes !=null)
  {
    foreach (HtmlNode node in nodes)
    {
      if (node.Attributes.Contains("src"))
      {
        string data = node.Attributes["src"].Value;
        string imgPath = Application.StartupPath+"\\"+data;
        var imgLogo = new LinkedResource(imgPath);
        imgLogo.ContentId = Guid.NewGuid().ToString();
        imgLogo.ContentType = new ContentType("image/jpeg");
        myResources.Add(imgLogo);
        node.Attributes["src"].Value = string.Format("cid:{0}", imgLogo.ContentId);
        outputHtmlContent = doc.DocumentNode.OuterHtml;
      }
    }
  }
  else
  {
    outputHtmlContent = inputHtmlContent;
  }
  AlternateView av2 = AlternateView.CreateAlternateViewFromString(outputHtmlContent,
                            null, MediaTypeNames.Text.Html);
  foreach (LinkedResource linkedResource in myResources)
  {
    av2.LinkedResources.Add(linkedResource);
  }

  msg.AlternateViews.Add(av2);

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

Sergey Alexandrovich Kryukov

Это вполне решаемо, но как показанный код связан с электронной почтой?
—СА

sayana3

Я только что показал здесь только раздел тела сообщения.
Любые полезные ссылки для отображения нескольких изображений в виде встроенных.

Sergey Alexandrovich Kryukov

Теперь я понимаю, Спасибо. Пожалуйста, смотрите мой ответ.
—СА

2 Ответов

Рейтинг:
2

Mashudu Nemukula

Попробуйте использовать это

<pre> private static AlternateView GetEmbeddedImage(string body)
        {
            var linkedResources = GetLinkedResources();

            AlternateView alternateView = AlternateView.CreateAlternateViewFromString(body, Encoding.UTF8, MediaTypeNames.Text.Html);

            foreach (var res in linkedResources)
            {
                alternateView.LinkedResources.Add(res);
            }

            return alternateView;
        }

        private static ICollection<LinkedResource> GetLinkedResources()
        {
            var linkedResources = new List<LinkedResource>();

            linkedResources.Add(new LinkedResource(@"imagepath")
            {
                ContentId = "HeaderId",
                TransferEncoding = TransferEncoding.Base64
            });

            linkedResources.Add(new LinkedResource(@"imagepath")
            {
                ContentId = "MapId",
                TransferEncoding = TransferEncoding.Base64
            });

            return linkedResources;
        }


И вызовите метод, как показано ниже

mailMessage.AlternateViews.Add(GetEmbeddedImage(body));


Рейтинг:
0

sayana3

Сэр,когда я попытался добавить несколько связанных ресурсов для нескольких изображений,это не сработало.Отображается только первое изображение ,остальные просто приходят в виде прикрепленного файла.Мне нужно отобразить все изображения.

Sergey Alexandrovich Kryukov

Как я уже сказал в одном из упомянутых ответов, на самом деле ничего не "привязано". Это всего лишь вопрос представления контента в стандартном почтовом средстве просмотра. И это контролируется заголовком каждой части, "содержание-диспозиция". Он должен быть "встроенным" для каждой части, которую вы хотите встроить.
—СА