我应该使用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);
  • 决定上述决定的因素是什么?
  • 以上两种方法有什么区别?

我应该使用GUID或DefaultExtendedPropertySet.在构造ExtendedPropertyDefi

对我自己的问题的直接回答如下:但读完之后,我意识到还有更多相关的事情需要了解。这些都跟在答案后面。

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是非常明确的,所以我确实会这样做。在该属性集中,您当然可以为您的属性使用任何名称。

相关文章:
  • 没有找到相关文章