在构造ExtendedPropertyDefinition时,我应该使用GUID还是DefaultExtendedPropertySet.PublicStrings?
我正在使用EWS Managed API 1.2和Exchange Server 2007开发C#.NET Framework 4.5 Windows窗体应用程序,它执行某种类型的邮件同步。
既然我正在处理扩展属性,我想清楚一些事情:
Q1。 DefaultExtendedPropertySet
类的目的是什么? MSDN 说 “定义默认的扩展属性集”。
- 是否只是对扩展属性进行分组?
- 如果是的话,为什么首先在那里进行分组呢?
- 我们是否有任何Ews API方法可以获取属于项目上同一组的所有扩展属性的值?
Q2。 在构造ExtendedPropertyDefinition
时,我无法决定是否应该使用自定义GUID或DefaultExtendedPropertySet.PublicStrings
:
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创建一个新组,从而在组级别和名称级别提供两个级别的分隔。但是,具有非generics名称的
DefaultExtendedPropertySet.PublicStrings
也足够了。 要点是避免与其他供应商创建的命名属性发生冲突。 如果要将应用程序与其他一些应用程序集成,PublicStrings
还可以提供更好的可发现性(在迭代期间可能需要非常仔细地指定GUID)。
MAPI属性
- Microsoft使用Messaging API(MAPI)作为连接不同邮件传输组件的方法。 MAPI规范将大多数对象表示为由属性标识符或PropID标识的属性。
- 属性标识符是一组hex值,范围从1到0xFFFF(总计65536)。
- 从历史上看,为了方便起见,这些属性被划分为逻辑组 。
- 标准MAPI属性或固定属性 – 属性低于
0x8000
。 该范围细分为:- 可传输 – 此范围由Exchange可以通过消息发送的属性组成。
- 内部 – 此范围由可能仅由Exchange设置的属性组成。
- 不可传输 – 此范围表示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将为其创建命名属性并将其存储在消息上。
有一些微妙的历史细节,如
- Imail在Exchange 2000中重写,包括Ad-hoc标头 ,后者又包含x-header。
- 由于MAPI属性的数量(65536)存在限制,因此在Exchange服务器上为其分配配额
- 从版本到Exchange服务器版本,由于不同的设计决策,事情会发生变化:
- 其中MAPI属性将像特定邮件或整个邮箱数据库一样进行维护
- 保留GUID和名称到MAPI属性的规则
请在以下链接中阅读更多详细信息:
- 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具有的默认扩展属性集 ,例如DefaultExtendedPropertySet.Task
。 它不适用于您自己的自定义扩展属性集。
Q2) MSDN非常明确地将Guid用于任何自定义扩展属性集,所以我的确会这样做。 在该属性集中,您当然可以使用您的财产的任何名称。