在构造ExtendedPropertyDefinition时我应该使用GUID还是DefaultExtendedPropertySet.PublicStrings?

时间:2014-08-07 16:20:04

标签: c# .net exchange-server exchangewebservices

我正在使用EWS Managed API 1.2和Exchange Server 2007开发C#.NET Framework 4.5 Windows窗体应用程序,它执行某种邮件同步。

现在我正在处理扩展属性,我想清楚一些事情:

Q1。 DefaultExtendedPropertySet课程的目的是什么? MSDN says“定义扩展属性的默认集。”

  • 是否只是对扩展属性进行分组?
  • 如果是,为什么首先在那里进行分组?
  • 我们是否有任何Ews API方法可以获取属于项目上同一组的所有扩展属性的值?

Q2。我在构建DefaultExtendedPropertySet.PublicStrings时无法决定是否应该使用自定义GUID或ExtendedPropertyDefinition

var MyXProp = new ExtendedPropertyDefinition(
             DefaultExtendedPropertySet.PublicStrings, 
            "MyXProp", MapiPropertyType.String);

OR

Guid MyPropertySetId = new Guid("{C11FF724-AA03-4555-9952-FA248A11C3E}");            
var extendedPropertyDefinition = new ExtendedPropertyDefinition(
             MyPropertySetId, "MyXProp", MapiPropertyType.String);
  • 应该决定上述决定的因素是什么?
  • 上述两种方法有何不同?

2 个答案:

答案 0 :(得分:5)

我自己的问题的直接答案如下。但阅读后我意识到还有很多相关的事情要知道。所以这些事情就是答案。

Q1。

  • 是的,DefaultExtendedPropertySet用于分组目的。 Microsoft预定义了一些名称空间以鼓励对命名属性进行逻辑分组,并将其包含在此枚举中。
  • 分组是为了方便,并避免不同供应商引入的不同属性名称之间的冲突。
  • 没有API可以获取属于同一组的所有属性的值。

<强> Q2。

  • GUID创建一个新组,从而在组级别和名称级别提供两个级别的分离。但是,具有非通用名称的DefaultExtendedPropertySet.PublicStrings也足够了。要点是避免与其他供应商创建的命名属性发生冲突。如果要将应用程序与其他一些应用程序集成,PublicStrings还可以提供更好的可发现性(在迭代期间可能需要非常仔细地指定GUID)。

MAPI属性

  • Microsoft使用Messaging API(MAPI)作为连接不同邮件传输组件的方法。 MAPI规范将大多数对象表示为由属性标识符或PropID标识的属性。
  • 属性标识符是一组十六进制值,范围从1到0xFFFF(总计65536)。
  • 从历史上看,为方便起见,这些属性分为逻辑组
  • 标准MAPI属性或固定属性 - 0x8000下的属性。该范围细分为:
    • 可传输 - 此范围由Exchange可以通过邮件发送的属性组成。
    • 内部 - 此范围由可能仅由Exchange设置的属性组成。
    • 不可传输 - 此范围表示Exchange传递邮件时未在组织外部传递的属性
  • 命名属性 - 0x8000以上的属性。它们允许供应商/开发人员通过添加自己的属性来扩展标准MAPI属性集。有两种命名属性:
    • 带有数字名称的属性 - 由MS Outlook等程序使用;这些属性名称通常在源文件中定义。
    • 具有字符串名称的属性 - 这些属性具有与其关联的GUID以及名称,因此允许开发人员将命名属性划分为属性集。每个GUID表示一个属性集,因此所有具有相同属性的命名属性与它们关联的GUID属于同一属性集。

rfc822 x-headers到MAPI属性转换

  • 在互联网上发送的消息以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属性的规则

请在以下链接中阅读更多详情:

答案 1 :(得分:2)

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

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