2016-03-01 3 views
0

Некоторый код Outlook VBA, который сохраняет вложения электронной почты в соответствии с их именами файлов, не удался во встроенном растровом изображении, когда он попытался получить доступ к свойству FileName этого «приложения».Как проверить свойство FileName вложений Outlook

Как это обнаружить? Свойство FileName должен быть строкой, но ни один из этих тестов ловит:

If objAtt.FileName = "" Then .... 
If objAtt.FileName = vbNullString Then .... 

Но каждая попытка к этому свойству вызывает ошибку во время выполнения:

Outlook cannot perform this action on this type of attachment.

Я предпочел бы не используйте свойство DisplayName, если это возможно.

Также кажется, что я могу фильтровать вложения в соответствии со значением их свойств FileType, но мне не удалось найти список, связывающий эти значения Integer с типами файлов.

Совет приветствуется.

ответ

1

Свойство FileName применимо только к обычным вложениям типа olByValue. В вашем случае вы, скорее всего, имеете дело с вложением типа olOLE, которое действительно представляет собой сериализованный внедренный OLE-объект - поток хранит растровое изображение (или метафайл), которое Outlook использует для представления изображения, а также фактические данные, которые оригинальное приложение tha tcreated данные (MSPaint?) могут использовать для редактирования.

Данные привязки OLE хранятся в формате интерфейса IStorage. Фактический формат данных зависит от приложения, используемого для его создания (MSPaint, Excel и т. Д.). Объектная модель Outlook не позволяет сохранять такие вложения с помощью Attachment.SaveAsFile

В зависимости от языка, который вы используете (лучше всего использовать C++ или Delphi), вам необходимо открыть свойство PR_ATTACH_DATA_OBJ как IStorage, а затем извлечь данные (IAttach :: OpenProperty (PR_ATTACH_DATA_OBJ, IID_IStorage, ...)). Взгляните на сообщение с помощью OutlookSpy - нажмите кнопку «Сообщение», перейдите на вкладку «GetAttachmentTable», дважды щелкните по вложению OLE, выберите PR_ATTACH_DATA_OBJ, щелкните правой кнопкой мыши, IAMPIProp :: OpenProperty.

Redemption При использовании вариант, он извлекает данные крепления для дюжины наиболее популярных форматов (MSPaint, Excel, Word, PDF и т.д.):

set Session = CreateObject("Redemption.RDOSession") 
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
set OutlookMsg = Application.ActiveExplorer.Selection.Item(1) 
set Msg = Session.GetRDOObjectFromOUtlookObject(OutlookMsg) 
for each attach in Msg.Attachments 
    attach.SaveAsFile "c:\temp\" & attach.FileName 
next 
+0

Благодарности. Это очень информативно. В настоящий момент я ограничен VBA, и все, что мне нужно сделать, это избегать подобных «привязанностей» и улавливать определенные типы/расширения; надеюсь, не прибегая к использованию DisplayName. – mmmbeer

+1

Просто проверьте свойство Attachment.Type - https://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.outlook.olattachmenttype –

+0

Спасибо. Я видел эту ссылку, но я не был уверен, что она была исчерпывающей, поскольку показанное перечисление имеет только четыре значения, а свойство типа файла содержит по крайней мере целые числа 1 и 6. – mmmbeer

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