Экранирование файла вложения для погашения отличается от Outlook

Мы пытаемся сохранить вложения, выбранные пользователем с помощью Redemption, но наткнулись на имя файла, чтобы избежать несоответствия между VSTO и Redemption. Что мы делаем:

  1. С помощью контекстного меню вложения сохраните в базе данных индекс и имя файла attachmentSelection [1], а также entryId и storeId сообщения.
  2. Через некоторое время (возможно, даже после перезапуска Outlook) нам нужно сохранить это вложение в файл. Для этого мы получаем это электронное письмо с Redemption по идентификатору, получаем вложение по индексу (rdoMail.Attachments [index]), а также проверяем совпадение имени файла, поскольку в соответствии с этим: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.attachment.index?view=outlook-pia#Microsoft_Office_Interop_Outlook_Attachment_Index свойство index действительно только во время текущего сеанса. Хотя не совсем понятно, что они означают. Может ли это измениться, если электронное письмо уже сохранено и отправлено? Или получил?
  3. Для ответного электронного письма VSTO Attachment.Filename - «RE Test.msg», а RDOAttachment.Filename - «RE_ Test.msg» (это вложение msg другого электронного письма).

Итак, вопросы:

  1. почему он другой и где-то задокументирован? Можем ли мы, например, заменить _ на string.Empty для имен файлов Redemption или могут быть другие случаи?
  2. Или, может быть, есть способ как-то получить RDOAttachment из объекта Outlook Attachment?
  3. Можем ли мы полагаться на то, что индекс вложений Redemption такой же, как у Outlook?

person Sergey Belikov    schedule 19.11.2019    source источник


Ответы (1)


  1. Похоже, вы имеете дело со встроенным вложением сообщения - в отличие от обычных вложений по значению, которые раскрывают свойство PR_ATTACH_LONG_FILENAME MAPI, для встроенных вложений нет внутреннего свойства имени файла. И OOM, и Redemption генерируют это свойство из встроенной темы сообщения, доступ к которой вы можете получить через RDOAttachment.EmbeddedMsg.Subject. OOM вообще не показывает вложенные вложения сообщений.

  2. Да, используйте метод RDOSession.GetRDOObjectFromOUtlookObject

  3. Индекс обычно не меняется, но может. Сам MAPI использует PR_ATTACH_NUM для открытия вложения с помощью IMessage :: OpenAttach, но он может отличаться в зависимости от того, как было открыто сообщение - поддельное IMessage, возвращаемое из MailItem.MAPIOBJECT, может иметь другое значение PR_ATTACH_NUM из собственного сообщения, возвращаемого поставщиком хранилища.

person Dmitry Streblechenko    schedule 19.11.2019
comment
Спасибо за информацию! Мы закончили тем, что получили эти почтовые элементы из выборки с помощью Redemption и вложения оттуда. В любом случае мы постепенно переходим на использование Redemption вместо OOM. - person Sergey Belikov; 20.11.2019