Копирование встроенных изображений из существующего объекта MailItem - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь сгенерировать новые MailItems из существующего, который в настоящее время редактируется. Пользователь вводит содержимое своей электронной почты (currentMailItem в следующем коде), нажимает кнопку, и группа MailItems генерируется с использованием currentMailItem в качестве шаблона.

Работает нормально, за исключением встроенных изображений: подпись, изображения, вставленные с помощью команды Вставить, они не отображаются в сгенерированных письмах («Связанное изображение не может быть отображено ...»). Поэтому я пытаюсь получить изображения, присоединить их к новым MailItems и заново связать их.

Я получаю mailItem с:

Outlook.MailItem currentMailItem = Application.ActiveInspector().CurrentItem;

Затем я зацикливаю вложения (я делаю это в любом случае, чтобы скопировать фактические вложения в сгенерированные письма)

foreach (Attachment attachment in currentMailItem.Attachments)
{
    var tempFile = "...";
    attachment.SaveAsFile(tempFile);
}

И вот тогда происходят некоторые странные вещи, используя простейшую возможную ситуацию: письмо, содержащее одну короткую строку, и подпись с изображением.

  • При первом запуске функции вложения полностью пусты, следа изображения подписи нет.

  • Если я снова запускаю функцию, на этот раз есть одно вложение, только я получаю исключение при попытке сохранить вложение:

    System.Runtime.InteropServices.COMException: «Невозможно сохранить вложение. Невозможно добавить вложение; источник данных не предоставлен. '

  • И еще более странно, один раз и только один раз, хотя я и запускал этот код тысячу раз, мне действительно удалось сохранить вложение, которое, как и ожидалось, было изображением подписи.

На данный момент я открыт для любого указателя ... Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Прежде всего, я бы рекомендовал сохранить пользовательские изменения, сделанные в пользовательском интерфейсе, вызвав метод Save:

Outlook.MailItem currentMailItem = Application.ActiveInspector().CurrentItem;
currentMailItem.Save();
Outlook.MailItem copy = currentMailItem.Copy();

// do whatever you need with a copy

Затем вы можете попытаться использовать метод MailItem.Copy , который создает другой экземпляр объекта. Обратите внимание, что метод Copy возвращает переменную, представляющую объект MailItem, который можно отправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...