2013-10-11 2 views
0

Сообщения электронной почты в формате RTF могут иметь встроенное вложенное вложение. MAPI дает имя файла встроенного вложения, но без расширения. Как узнать расширение?Расширение файла для приложения «приложение/ole»

MAPI предоставляет описание содержимого как «Изображение (устройство, независимое растровое изображение)». Я могу зависеть от этих данных, чтобы вычислить расширение файла как BMP. Но это работает для BMP, но не для PDF, WORD, EXEL. Я хотел бы знать, есть ли решение (например, поиск в REGISTRY), который работает на все, без меня, меняя код для каждого типа файла.

Mime headers генерируется путем считывания свойств MAPI крепления. Вы видите, что в приложении отсутствует расширение.

Content-Disposition: inline; filename=ATT87266 
Content-Transfer-Encoding: Base64 
content-type: application/ole;name="Picture (Device Independent Bitmap)" 
content-description: Picture (Device Independent Bitmap) 

ответ

1

Встраиваемые вложения OLE не являются файлами, они являются хранилищем COM-файлов IStorage. Если вы посмотрите на приложение OLE с OutlookSpy (нажмите кнопку «Сообщение», перейдите в GetAttachmentTable, дважды щелкните по вложению), вы увидите, что нет двоичного свойства PR_ATTACH_DATA_BIN, где хранятся регулярные привязки по значению; у вас есть свойство PR_ATTACH_DATA_OBJ (PT_OBJECT). Вы можете открыть его в OutlookSpy, щелкнув правой кнопкой мыши и выбрав IMAPIProp :: OpenProperty, затем выбрав IStorage в качестве интерфейса.

Хранилище OLE будет содержать несколько потоков, содержащих флаги, используемые Outlook, метафайл, используемый для визуализации объекта при его просмотре, и фактические данные, используемые любым OLE-сервером для создания приложения OLE. Вы можете посмотреть CLSID хранилища, чтобы выяснить приложение, используемое для создания вложения. Как только вы это знаете, вы можете извлечь необработанные данные файла из потока данных конкретного приложения внутри этого IStorage.

+0

Спасибо за ответ. Как вы описали, я извлекаю вложение, хранящееся внутри объекта IStorage, но я не знал о части CLSID. Я добавлю этот код. Спасибо, Рамеш – user1174790

 Смежные вопросы

  • Нет связанных вопросов^_^