MAPI 规范属性

适用于:Outlook 2013 | Outlook 2016

规范属性是表示 MAPI 属性的虚拟属性,或使用相同的属性标识符定义的多个 MAPI 属性。 规范属性仅用于在代码之外的讨论或文档中促进 MAPI 属性的一致标识。 与 MAPI 定义的标记属性名称不同,规范属性名称未定义为 MAPI 头文件中的全局常量。

命名约定

规范属性名称以前缀“Pid”开头,表示“属性标识符”。根据属性是带标记的属性、具有数字标识符的命名属性还是具有字符串名称的命名属性,前缀将进一步限定为“PidTag”、“PidLid”和“PidName”。 例如, PidTagAccount 表示已标记的属性 ,PR_ACCOUNT (PidTagAccount) 、 PR_ACCOUNT_A (PidTagAccount) ,以及 PR_ACCOUNT_W 指定收件人帐户名称的 (PidTagAccount) ; PidLidContacts 表示 dispidContacts 属性,该属性具有数字标识符,并指定与消息关联的联系人的名称; 和 PidNamePhishingStamp 表示“http://schemas.microsoft.com/outlook/phishingstamp,一个具有字符串名称的命名属性,并指定标记可能为网络钓鱼的邮件的字符串。

使用一个规范属性表示类似属性

在 MAPI 中标识属性

MAPI 中的所有属性都由属性标识符标识,该标识符是一个无符号的 16 位值。 属性标识符和属性类型 (另一个无符号的 16 位值) 构成属性的属性标记。

MAPI 使用属性标记来唯一定义属性。 具有相同属性标记的属性(如 PR_BUSINESS2_TELEPHONE_NUMBER (PidTagBusiness2TelephoneNumber) 和 PR_OFFICE2_TELEPHONE_NUMBER (PidTagBusiness2TelephoneNumber) )被视为 MAPI 中的相同属性。 有关 MAPI 为其自己的属性定义的属性标记列表,请参阅 MAPI 头文件 Mapitags.h。

请注意,MAPI 将属性标识符划分为多个区域。 标识符属于范围,表示其使用和所有权。 已标记属性的属性标识符属于0x7FFF 0x0001范围。 在此范围内是 MAPI 定义的属性的属性标识符,这些属性属于0x3FFF 0x0001范围。 命名属性的属性标识符位于从 0x8000 到 0x8FFF 的范围内。

命名属性还由属性集特性化,长 ID (LID) (无符号 32 位值)或字符串。 属性集是标识一组具有类似用途的命名属性的 GUID。 属性集和 LID 或字符串名称用于获取或设置命名属性。

属性类型

除了标识符,属性由数据类型特性化,该数据类型指定该属性允许的值的类型。

对于属于字符串类型的属性,根据基础平台中对 Unicode 的支持,属性可以是类型PT_STRING8 (以 null 结尾的 8 位字符串) 或PT_UNICODE (以 null 结尾的 Unicode 字符串) 。 可以使用PT_TSTRING类型定义属性,根据编译设置,PT_TSTRING默认为支持 Unicode 的平台的 Unicode 字符串,或者对于支持 ANSI 或 DBCS 的平台,则默认为PT_STRING8字符串。 字符串类型属性通常由三个类似名称(如 PR_ACCOUNTPR_ACCOUNT_APR_ACCOUNT_W)标识,它们分别属于PT_TSTRING、PT_STRING8和PT_UNICODE类型。

有关属性类型和与类型相关的宏的详细信息,请参阅 MAPI 头文件 Mapidefs.h。

标识类似属性

在当前的 MAPI 属性布局中,发现属性已在不同的属性名称下公开,所有这些属性都使用相同的属性标识符定义,这种情况并不少见。 例如,Mapitags.h 中将标记的属性 PR_BUSINESS2_TELEPHONE_NUMBERPR_OFFICE2_TELEPHONE_NUMBER定义为具有相同的属性标识符和类型。 与这两个属性密切相关的有:

  • PR_BUSINESS2_TELEPHONE_NUMBER_A

  • PR_BUSINESS2_TELEPHONE_NUMBER_W

  • PR_OFFICE2_TELEPHONE_NUMBER_A

  • PR_OFFICE2_TELEPHONE_NUMBER_W

具有“_A”后缀的属性类型化为PT_STRING8,具有“_W”后缀的属性类型化为PT_UNICODE。

在此示例中,规范属性 PidTagBusiness2TelephoneNumber 的用途是便于使用一个标识符引用此类紧密关联的 MAPI 属性,并且以一致的方式 (在所有 MAPI 属性中使用“Pid”前缀) 。 若要查找规范属性表示的实际 MAPI 属性,请参阅 将规范属性名称映射到 MAPI 名称。 若要查找与 MAPI 属性关联的规范属性,请参阅 将 MAPI 名称映射到规范属性名称

规范属性名称的 MAPI 支持

由于规范属性不是实际属性,并且未在 MAPI 头文件中定义,因此不应在代码中使用规范属性名称;相反,应继续使用代码中的确切 MAPI 属性名称。 例如,可以在代码外部将 PR_BUSINESS2_TELEPHONE_NUMBERPR_OFFICE2_TELEPHONE_NUMBER 引用为 PidTagBusiness2TelephoneNumber,并在代码中使用 PR_BUSINESS2_TELEPHONE_NUMBERPR_OFFICE2_TELEPHONE_NUMBER

如果必须在代码中使用规范属性名称,则必须先在自己的头文件中定义它们。

规范属性名称和 Exchange 协议规范

规范名称在Microsoft Exchange Server协议规范中引用,Exchange Server用于与其他 Microsoft 产品通信。 有关 Exchange 协议规范引用的消息对象属性的详细信息,请参阅 [MS-OXPROPS]

另请参阅

MAPI 属性标记

MAPI 属性标识符概述

MAPI 属性类型概述