Вложение растрового изображения в электронную почту Outlook 365 - PullRequest
0 голосов
/ 21 февраля 2020

Я могу успешно создать растровый объект и сохранить его локально. Однако я хотел бы либо вставить это изображение в электронное письмо, либо сохранить его в потоке памяти и добавить его в качестве вложения в электронное письмо.

Я попробовал приведенный ниже код с некоторым успехом:

 using (var stream = new MemoryStream())
            {
                bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);


                string tempFilePath = Path.GetTempPath() + "test.jpg";
                FileStream fs = new FileStream(tempFilePath, FileMode.Create);

                stream.CopyTo(fs);
                fs.Close();
                mailItem.Attachments.Add(tempFilePath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, 1, "test.jpg");



            }

Проблема в том, что когда я открываю это изображение, я получаю сообщение «Похоже, мы не поддерживаем это формат файла". Я не уверен, почему эта проблема происходит. Я уже пытался преобразовать изображение в base 64, а затем пытался использовать его в теге html, но не похоже, что встраивание изображений поддерживается в этой версии outlook. Ваша помощь приветствуется.

1 Ответ

0 голосов
/ 21 февраля 2020

Я решил эту проблему, сохранив изображение локально, прикрепив его к электронному письму по значению, а затем используя SetProperty.

// Добавляем guid для рандомизации строки имени файла id = Guid.NewGuid (). ToString ();

            string SchemaPR_ATTACH_CONTENT_ID = @"http://schemas.microsoft.com/mapi/proptag/0x3712001E";

            //Get the user's directory path to temp
            string tempFilePath = Path.GetTempPath() + $"screenShotImage{id}.jpg";

            //Save the screenshot in Temp
            bitmap.Save(tempFilePath, System.Drawing.Imaging.ImageFormat.Jpeg);

            //Attach the screenshot to the email
            mailItem.Attachments.Add(tempFilePath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, 1, $"Timeline Graph for Release {releaseId}.jpg");
            mailItem.Attachments[mailItem.Attachments.Count].PropertyAccessor.SetProperty(SchemaPR_ATTACH_CONTENT_ID, id);

            //Clean up the file that we stored
            if ((System.IO.File.Exists(tempFilePath)))
            {
                System.IO.File.Delete(tempFilePath);
            }

            //Display the image into the email
            string banner = string.Format(@"<br/><a href='{0}' ><img src='cid:{1}' ></a></body>", $"{url}/release/timeline{releaseId}", id);
            mailItem.HTMLBody = mailItem.HTMLBody.Replace("</body>", banner);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...