我应该使用GUID或DefaultExtendedPropertySet.在构造ExtendedPropertyDefi
本文关键字:ExtendedPropertyDefi DefaultExtendedPropertySet GUID 我应该 | 更新日期: 2023-09-27 18:17:03
我正在开发c# . net Framework 4.5 Windows Form应用程序,使用EWS Managed API 1.2和Exchange Server 2007来执行某种邮件同步。
现在我正在处理扩展属性,我想澄清一些事情:
Q1。 DefaultExtendedPropertySet
类的目的是什么?MSDN表示"定义扩展属性的默认集合"。
- 它只是为了分组扩展属性吗?
- 如果是,为什么要在那里分组?
- 我们是否有任何Ews API方法可以获取属于同一组的所有扩展属性的值?
Q2。我无法决定是否应该使用自定义GUID或DefaultExtendedPropertySet.PublicStrings
,而构建ExtendedPropertyDefinition
:
var MyXProp = new ExtendedPropertyDefinition(
DefaultExtendedPropertySet.PublicStrings,
"MyXProp", MapiPropertyType.String);
或
Guid MyPropertySetId = new Guid("{C11FF724-AA03-4555-9952-FA248A11C3E}");
var extendedPropertyDefinition = new ExtendedPropertyDefinition(
MyPropertySetId, "MyXProp", MapiPropertyType.String);
- 决定上述决定的因素是什么?
- 以上两种方法有什么区别?
对我自己的问题的直接回答如下:但读完之后,我意识到还有更多相关的事情需要了解。这些都跟在答案后面。
Q1。
- 是的,
DefaultExtendedPropertySet
用于分组。Microsoft预先定义了一些命名空间,以鼓励命名属性的逻辑分组,并将它们包含在此枚举中。 - 分组是为了方便,也是为了避免不同供应商引入的不同属性名称之间的冲突。
- 没有API来获取属于同一组的所有属性的值。
Q2。
- GUID创建一个新的组,从而在组级和名称级两个级别上提供分离,但是,具有非通用名称的
DefaultExtendedPropertySet.PublicStrings
也足够了。要点是避免与其他供应商创建的命名属性冲突。如果应用程序要与其他应用程序集成,PublicStrings
还可以提供更好的可发现性(在集成期间可能需要非常仔细地指定guid)。
MAPI属性
- Microsoft使用消息传递API (MAPI)作为连接不同消息传递传输组件的手段。MAPI规范将大多数对象表示为由属性标识符或propid标识的属性。
- 属性标识符是一组十六进制值,取值范围是1到0xFFFF(共65536)。
- 历史上,为了方便,这些属性被划分为逻辑组。
-
标准MAPI属性或固定属性 -
0x8000
以下的属性。这个范围被细分为:- Transmittable—此范围由Exchange可以随消息发送的属性组成。
- Internal -该范围由只能由Exchange设置的属性组成。
- Non transmittable—此范围表示Exchange传递消息时不在组织外部传递的属性
-
命名属性 -
0x8000
以上的属性。它们允许供应商/开发人员通过添加自己的属性来扩展标准的MAPI属性集。有两种类型的命名属性:- 具有数字名称的属性 -由MS Outlook等程序使用;这些属性名通常在源文件中定义。
- 具有字符串名称的属性 -这些属性具有与名称相关联的guid,从而允许开发人员将命名属性划分为属性集。每个GUID代表一个属性集,因此所有具有相同GUID的命名属性都属于同一个属性集。
rfc822 x-headers到MAPI属性的转换
- 在Internet上发送的消息以message/rfc822格式发送,该格式支持一组名为x-headers的属性。
- rfc822 x-headers键值对到MAPI属性的转换是由一个名为Imail的组件完成的。
- 因此,如果入站消息有x-header, Imail将为其创建命名属性并将其存储在消息中。
有一些微妙的历史细节,如
- 在Exchange 2000中重新编写了
- Imail,以包含Ad-hoc头,其中又包含x头。
- 由于mapi属性的数量有限(65536),所以在Exchange服务器上为它们分配配额 从不同版本到不同版本的Exchange服务器,由于不同的设计决策,以下事情发生了变化:
- ,其中MAPI属性将被维护,如在特定邮件或整个邮箱数据库
- 为MAPI属性保留GUID和名称的规则
在下面的链接阅读更多细节:
- http://technet.microsoft.com/en-us/library/bb851492 (v = exchg.80) . aspx
- http://technet.microsoft.com/en-us/library/jj937955 (v = exchg.141) . aspx
- http://technet.microsoft.com/en-us/library/bb851493 (v = exchg.80) . aspx
- http://blogs.technet.com/b/exchange/archive/2010/07/29/3410545.aspx
- http://blogs.technet.com/b/exchange/archive/2009/04/06/3407221.aspx
Q1) DefaultExtendedPropertySet
枚举定义Exchange具有的默认扩展属性sets,例如DefaultExtendedPropertySet.Task
。它不适合用于您自己的自定义扩展属性集。
Q2) MSDN对于任何自定义扩展属性集使用Guid是非常明确的,所以我确实会这样做。在该属性集中,您当然可以为您的属性使用任何名称。