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

Mah*_*aha 6 .net c# exchange-server exchangewebservices

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

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

Q1.DefaultExtendedPropertySet上课的目的是什么?MSDN "定义默认的扩展属性集".

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

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

var MyXProp = new ExtendedPropertyDefinition(
             DefaultExtendedPropertySet.PublicStrings, 
            "MyXProp", MapiPropertyType.String);
Run Code Online (Sandbox Code Playgroud)

要么

Guid MyPropertySetId = new Guid("{C11FF724-AA03-4555-9952-FA248A11C3E}");            
var extendedPropertyDefinition = new ExtendedPropertyDefinition(
             MyPropertySetId, "MyXProp", MapiPropertyType.String);
Run Code Online (Sandbox Code Playgroud)
  • 应该决定上述决定的因素有哪些?
  • 它通过上述两种方法有何不同?

Mah*_*aha 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标题到MAPI属性的转换

  • 在Internet上发送的消息以message / rfc822格式发送,该格式支持称为x-headers的一组属性。
  • 从rfc822 x-headers键值对到MAPI属性的转换是通过名为Imail的组件完成的。
  • 因此,如果入站邮件具有x-header,则Imail将为其创建命名属性并将其存储在邮件中。

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

  • Imail在Exchange 2000中被重新编写,以包含临时标头,而该标头又包含x标头。
  • 由于MAPI属性的数量(65536)受到限制,因此在Exchange服务器上为其分配了配额
  • 由于不同的设计决策,从版本到版本的Exchange服务器,以下内容已更改:
    • MAPI属性将像在特定邮件上或在整个邮箱数据库上一样被维护
    • 保留GUID和MAPI属性名称的规则

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