Что не так с моим кодом для вставки изображения (хранится в базе данных) в HTML-почте? - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу встраивать изображения в почту.Я использую веб-службу Exchange для отправки почты.Изображения хранятся в базе данных в формате байтового массива.Даже после встраивания изображений в формате CID я не вижу изображения в почте

Изображения хранятся в базе данных.См. Таблицу ниже:

ImageId ImageName   ImagePath   Data    ContentType
1   SampleImage.jpg SamplePath  0xFFD…  image/png
2   SampleImage.jpg SamplePath  0xFFD…  image/png
3   SampleImage.jpg SamplePath  0xFFD…  image/jpeg
4   SampleImage.jpg SamplePath  0xFFD…  image/png

Я использую функции Azure для отправки электронных писем.Мой код для встраивания изображений выглядит следующим образом:

   var linkedResources = new List<LinkedResource>();
   try
   {
       HtmlDocument bodyDoc = new HtmlDocument();
       bodyDoc.OptionDefaultStreamEncoding = Encoding.UTF8;
       bodyDoc.LoadHtml(Body);
       var nodes = bodyDoc.DocumentNode.SelectNodes("//img[@src]");

       if (nodes != null && nodes.Count > 0)
       {
           foreach (HtmlNode link in nodes)
           {

               HtmlAttribute att = link.Attributes["src"];
               int id;
               if (att.Value.IndexOf("image/get?id=") > -1 && int.TryParse(att.Value.Substring(att.Value.IndexOf("image/get?id=") + "image/get?id=".Length), out id))
               {
                   if (id == 0)
                   {
                       HtmlAttribute altAttr = link.Attributes["alt"];
                       if (altAttr.Value.IndexOf("image/get?id=") > -1 &&
                           int.TryParse(
                               altAttr.Value.Substring(altAttr.Value.IndexOf("image/get?id=") + "image/get?id=".Length),
                               out id))
                       {
                       }
                   }
                   try
                   {
                    var image = ImageRepository.Get(id);
                    if (image != null)
                    {

                        var inlineImage = new LinkedResource(new MemoryStream(image.Data), image.ContentType)
                        {
                            ContentId = Guid.NewGuid().ToString()
                        };


                        att.Value = string.Format("cid:{0}", inlineImage.ContentId);
                        linkedResources.Add(inlineImage);
                    }

                }
                   catch (Exception e)
                   {
                        log.Info(e.Message);
                   }
               }
           }

        var view = AlternateViews.FirstOrDefault();

        log.Info("Embedded Images LOG");

        if (view == null)
        {
            log.Info("Embedded Images Info: View IS NULL");
            view = AlternateView.CreateAlternateViewFromString(Body, null, "text/html");
        }
        else
        {
            log.Info("Embedded Images Info: View IS NOT NULL");
        }

        foreach (var resource in linkedResources)
        {
            log.Info("Embedded Images Info: Adding Linked Resources");
            view.LinkedResources.Add(resource);
        }

        AlternateViews.Add(view);

        Stream stream = new MemoryStream();
           bodyDoc.Save(stream);
           stream.Seek(0, SeekOrigin.Begin);
           StreamReader sr = new StreamReader(stream);
           Body = sr.ReadToEnd();
    }

   }
   catch (Exception e)
   {
       log.Info(e.Message);
   }

Ожидаемый результат: Изображения успешно встраиваются в почту

Фактический результат: Сообщение об ошибке: Невозможно отобразить связанное изображение.Возможно, файл был перемещен, переименован или удален.Убедитесь, что ссылка указывает на правильный файл и местоположение

...