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

7
我正在使用EWS Managed API 1.2和Exchange Server 2007开发C# .NET Framework 4.5 Windows Form应用程序,用于执行某种邮件同步操作。现在我正在处理扩展属性,我想澄清一些事情: 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);
  • 什么因素应该决定上述决策?
  • 以上两种方法有何不同之处?
2个回答

6

下面是我自己问题的即时答案。但是在阅读后,我意识到还有许多相关的事情需要了解。因此,这些内容会在回答后提供。

Q1.

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

Q2。

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

MAPI属性

  • Microsoft使用消息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将为其创建命名属性并将其存储在邮件中。

还有一些微妙的历史细节,例如:

  • 在Exchange 2000中重新编写了Imail,以包括Ad-hoc headers,这反过来又包括x-headers。
  • 由于MAPI属性的数量(65536)存在限制,在Exchange服务器上为它们分配了配额。
  • 从一个版本到另一个版本的Exchange服务器,由于不同的设计决策,以下内容发生了变化:
    • MAPI属性将在特定邮件上还是整个邮箱数据库上维护的规则
    • 保留GUID和名称以用于MAPI属性

详细阅读以下链接:


1
设置在除“DefaultExtendedPropertySet.PublicStrings”之外的扩展属性将只在项目创建者的邮箱中可见。例如,如果在约会上使用GUID设置扩展属性,在从其他收件人(或房间)邮箱中读取约会时,扩展属性将不可用。只有从组织者邮箱中读取约会时,扩展属性才会可用。 - Sergiu Indrie

3
Q1) DefaultExtendedPropertySet 枚举定义了 Exchange 拥有的默认扩展属性集,例如 DefaultExtendedPropertySet.Task。它不适用于您自己的自定义扩展属性集。
Q2) MSDN 明确要求使用 GUID 作为任何自定义扩展属性集的标识,因此建议按照该要求进行操作。在该属性集中,您当然可以使用任何名称来命名您的属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接