定义新的 MAPI 属性
适用于:Outlook 2013 | Outlook 2016
尽管 MAPI 提供了大量供客户端和服务提供商使用的属性,但 MAPI 仍允许在必要时创建新属性。 定义新公共属性的一些有效方案包括客户端创建属性以支持新消息类,以及服务提供程序创建新属性以公开独特的消息传送系统功能。
服务提供程序为现有 MAPI 对象或消息类定义新属性通常无效。 使用 MAPI 的主要好处之一是设置了大量消息传送系统元素的标准标识符和格式,使用户能够无缝地混合和匹配服务提供商。 使用非标准属性的服务提供商与其他服务提供程序不一样。
客户端可以通过以下方式为新消息类创建内容属性:
为邮件类特定的内容属性使用指定范围内的属性标识符。
- 或-
使用命名属性。
第一个选项更可取,因为并非所有服务提供程序都支持命名属性。 MAPI 定义了两个单独的范围,供客户端用于新的消息类特定内容属性:
0x6800 0x7BFF可传输属性
针对不可传输属性0x7FFF的0x7C00
属性标识符必须位于预定义的范围内,以帮助防止不同供应商或用户定义的属性之间的冲突。 但是,这些区域中属性的用户无法对属性的行为做出假设。 创建新消息类的每个客户端都有权访问这些范围;具有 xxxx 标识符的属性可能表示一个消息类的一个行为,另一个消息类的另一个行为。
命名属性用于保证特定属性对消息类是唯一的。 命名属性标识符从0x8000范围开始。 客户端定义一个或多个名称,然后调用消息存储的 IMAPIProp::GetIDsFromNames 方法,将标识符与每个名称相关联。 仅当对象的所有者支持命名属性时,客户端或服务提供程序才能使用命名属性为任何对象定义新属性。 这些属性的用户调用 GetIDsFromNames 和相关 IMAPIProp 方法 GetNamesFromIDs,以在名称和其标识符之间映射。
所有属性(新属性或现有属性)都必须使用预定义属性类型的集。 无法添加新的属性类型,并且无法修改或删除现有类型。 简单、小型的属性(如单字符或 16 位整数属性)可以存储在任何适当的类型中。 例如,整数可以存储为 ULONG ,字符串可以存储为 PT_STRING8。
使用 PT_BINARY 类型来指示计数的字节数组。 此属性类型对于扩展可在对象中存储的数据类型非常有用。 字节按顺序传输,不对数据的含义做出假设。 当客户端应用程序从此类属性中读取数据时,数据与存储方式不一样。 跨 CPU 移动数据时,客户端必须执行任何必要的字节交换。