在构造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属性的规则

请在以下链接中阅读更多详细信息:

Q1) DefaultExtendedPropertySet枚举定义了Exchange具有的默认扩展属性 ,例如DefaultExtendedPropertySet.Task 。 它不适用于您自己的自定义扩展属性集。

Q2) MSDN非常明确地将Guid用于任何自定义扩展属性集,所以我的确会这样做。 在该属性集中,您当然可以使用您的财产的任何名称。