Встроенные изображения в электронной почте не отображаются (.NET 3.5)

В.NET/C# 3.5 я создаю письмо со встроенными изображениями, получаю письмо в smtp4dev (http://smtp4dev.codeplex.com/), но изображения не отображаются. Я использую HTML Agility Pack для анализа HTML-документа и выполнения некоторой очистки (эта часть работает нормально).

//uninteresting code above

    var images = doc.DocumentNode.Descendants("img");

    List<MemoryStream> listOfStreams = new List<MemoryStream>();
    List<string> listOfCid = new List<string>();
    List<string> listOfReplacedSrcValues = new List<string>();

            foreach (var img in images)
            {
                var src = img.Attributes["src"];
                if (src != null && src.Value.StartsWith("http://"))
                {
                    listOfReplacedSrcValues.Add(src.Value);
                    //I build a string that looks like this inv_brandLogo_fr_gif
                    string cid = src.Value.Substring(src.Value.LastIndexOf('/'), src.Value.Length - src.Value.LastIndexOf('/')).Trim('/').Replace('.', '_');
                    string cidWithTimestamp = string.Format("cid:{0}_{1}", cid, DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fffffff")); //append a timestamp to ensure the cid is unique !
                    PageResult = PageResult.Replace(src.Value, cidWithTimestamp);
                    listOfCid.Add(cidWithTimestamp);

                    WebClient wc = new WebClient();
                    byte[] originalData = wc.DownloadData(src.Value);

                    MemoryStream ms = new MemoryStream(originalData);

                    listOfStreams.Add(ms);
                }
            }

            MailAlert.SendRecap(Context.User.Identity.Name, PageResult, listOfStreams, listOfCid);

//end of the 1st bit of code


public static void SendRecap(string connectedUser, string HTMLcontent, List<MemoryStream> listOfStreams, List<string> listOfCid)
        {
            try
            {
                SmtpClient sender = new SmtpClient();

                MailMessage message = new MailMessage();

                message.From = new MailAddress("recap@test.com");
                message.To.Add(string.Format("{0}@vente-privee.com", connectedUser));
                message.Subject = "Test Recap";
                message.Body = HTMLcontent;
                message.IsBodyHtml = true;

                int i = 0;
                string plainBody = "Plain text content, viewable by clients that don\'t support html";
                AlternateView plainView = AlternateView.CreateAlternateViewFromString(plainBody, null, "text/plain");
                AlternateView htmlView = AlternateView.CreateAlternateViewFromString(HTMLcontent, null, "text/html");

                //create the LinkedResource (embedded image)
                foreach (var ms in listOfStreams)
                {
                    ContentType ct = new ContentType();
                    if (listOfCid[i].Contains("gif"))
                    {
                        ct = new ContentType(MediaTypeNames.Image.Gif);
                    }
                    else if (listOfCid[i].Contains("jpg") || listOfCid[i].Contains("jpeg"))
                    {
                        ct = new ContentType(MediaTypeNames.Image.Jpeg);
                    }
                    else if (listOfCid[i].Contains("png"))
                    {
                        //contentType = "image/png";
                        ct = new ContentType(MediaTypeNames.Image.Jpeg);
                    }

                    LinkedResource imageResource = new LinkedResource(ms, ct);

                    imageResource.ContentId = listOfCid[i];
                    imageResource.TransferEncoding = TransferEncoding.Base64;

                    htmlView.LinkedResources.Add(imageResource);
                    i++;
                }

                message.AlternateViews.Add(plainView);
                message.AlternateViews.Add(htmlView);

                sender.Send(message);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

Когда я проверяю полученное письмо в smtp4dev, я вижу все его части в левом столбце "MIME Parts":

  • Безымянный: multipart / альтернатива (158959 байт)
    • Безымянный: текст / обычный (50642 байта)
    • Безымянный: текст / обычный (65 байт)
    • Безымянный: multipart/related (107752 байта)
      • Безымянный: text/html (50642 байта)
      • Безымянный: изображение / GIF (4610 байт)
      • Безымянный: изображение / JPEG (1908 байт)
      • Безымянный: изображение / GIF (540 байт)
      • Безымянный: изображение / GIF (544 байта)
      • Безымянный: text/html (48466 байт)

Я даже могу выбрать любое из этих изображений, щелкнуть вкладку "Тело", выбрать "Сохранить как" и успешно открыть их в моем любимом просмотрщике изображений.

Когда я выбираю строку "Безымянный: text/html (50642 bytes)", затем вкладку "Тело", я вижу HTML-источник сообщения электронной почты и все "cid:" (например: src="cid:inv_brandLogo_fr_gif_2013-01-04". -18-50-34-4569409")

Но если я нажимаю "Открыть" в smtp4dev, электронное письмо открывается в Internet Explorer без изображения.

Когда IE открывается, он показывает предупреждение внизу: "Internet Explorer ограничил эту веб-страницу от запуска сценариев или элементов управления ActiveX" и кнопку "Разрешить заблокированное содержимое", которую я нажимаю, но безрезультатно...

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

0 ответов

Другие вопросы по тегам