Поделиться через


attMAPIProps

Область применения: Outlook 2013 | Outlook 2016

Атрибут attMAPIProps является особенным тем, что его можно использовать для кодирования любого свойства MAPI, которое не имеет аналога в наборе существующих атрибутов, определенных TNEF. Данные атрибута — это подсчитываемый набор свойств MAPI, заложенных сквозно. Формат этой кодировки, позволяющий использовать любой набор свойств MAPI, выглядит следующим образом:

Property_Seq:

Property_Value,... счетчика свойств

Должно быть столько Property_Value элементов, сколько указывает значение property-count.

Property_Value:

свойство property-tag Property_property-tag_Proptag_Name

Тег свойства — это просто значение, связанное с идентификатором свойства, например 0x0037001F для PR_SUBJECT (PidTagSubject).

Свойство:

Значение —счетчик значения Значение,...

Значение:

значение-данные-значение-размер-значение-заполнение данных значение-размер-значение-IID значение-заполнение данных

Proptag_Name:

name-guid name-kind name-id name-guid name-kind name-string-length name-string-string padding

Инкапсуляция каждого свойства зависит от идентификатора свойства и типа свойства. Теги свойств, идентификаторы и типы определяются в файлах заголовков Mapitags.h и Mapidefs.h.

Если свойство является именованным свойством, за тегом свойства немедленно следует имя свойства MAPI, состоящее из глобально уникального идентификатора (GUID), типа и идентификатора или строки Юникода.

Многозначные свойства и свойства со значениями переменной длины, такие как PT_BINARY, PT_STRING8, PT_UNICODE или типы свойств PT_OBJECT, обрабатываются следующим образом. Сначала в поток TNEF помещается число значений, закодированных как 32-разрядная длинная строка без знака, а затем отдельные значения. Значение-данные каждого свойства кодируются как его размер в байтах, за которым следует само значение-данные. Значение-данные заполняются до 4-байтовой границы, хотя объем заполнений не включается в размер значения.

Если свойство имеет тип PT_OBJECT, за размером значения следует идентификатор интерфейса объекта . Текущая реализация TNEF поддерживает только идентификаторы интерфейсов IID_IMessage, IID_IStorage и IID_Istream. Размер идентификатора интерфейса включается в значение-размер.

Если объект является внедренным сообщением (то есть имеет тип свойства PT_OBJECT и идентификатор интерфейса IID_Imessage), данные значений кодируются как внедренный поток TNEF. Фактическое кодирование внедренного сообщения в реализации TNEF выполняется путем открытия второго объекта TNEF для исходного потока и обработки встроенного потока.