Как мне получить доступ к вложению электронной почты Outlook на C #, не сохраняя его в новом месте?
-
05-07-2019 - |
Вопрос
Я использую Microsoft.Office.Interop.Outlook
в C # для доступа к почтовому ящику и поиска сообщений с определенными вложениями файлов.Мне нужно взаимодействовать с вложениями.
В настоящее время я сохраняю файл в новое местоположение и получаю к нему доступ оттуда.Этот процесс копирования замедляет меня.В идеале я бы хотел получить доступ к файлу из любого места, где он хранится в памяти, но Outlook.Attachment.PathName
поле возвращает значение null.
Сообщения хранятся на сервере Exchange.
Можно ли получить к ним прямой доступ или мне нужно продолжить сохранение файлов?
Решение
Outlook.Attachment.PathName
подразумевает расположение диска. Вложение - это файл; если вы хотите взаимодействовать с ним, вы должны обращаться с ним как с файлом, а это значит сохранять его на локальном диске.
Объект Outlook.Attachment
на самом деле не содержит вложенный файл; он содержит ссылку на вложенный файл с некоторыми связанными метаданными.
Другие советы
Я не знаю, возможно ли это каким-либо образом с помощью объектной модели Outlook, но MAPI, безусловно, позволяет вам это.
Вам нужно открыть сообщения MAPIObject
, ан IMessage
.Оттуда используйте IMessage::OpenAttach()
, который возвращает IAttach
.
Размер вложения сохраняется в PR_ATTACH_SIZE
, фактические данные в PR_ATTACH_DATA_BIN
.
Как всегда, Искупление вероятно, есть более простой способ сделать это.
Редактировать:
Доступ через MAPI - это то, что Outlook в любом случае делает внутренне - должно быть достаточно быстрым, по крайней мере, при использовании режима кэширования Exchange.