【问题标题】:Access Outlook user properties from EWS从 EWS 访问 Outlook 用户属性
【发布时间】:2011-07-19 10:04:09
【问题描述】:

我正在尝试创建一个使用 EWS api 访问联系人的应用程序。

我需要查看此过程中的 Outlook 用户属性之一,但我看不到如何在使用 EWS 时获得它。目前我只是尝试...

service.Url = new Uri("https://url/ews/Exchange.asmx");
service.Credentials = new WebCredentials("credentials");
var results = service.FindItems(folderId, new ItemView(100));
foreach (var item in results)
{
     Contact contact = item as Contact;
     foreach (var prop in contact.ExtendedProperties)
     {
            Console.WriteLine(prop.Value.ToString());
     }
}

编译和执行没有问题,但对于每个联系人,ExtendedProperties 计数为 0,在 Outlook 中约为 30。

那么我怎样才能得到我正在寻找的属性呢?

仅供参考。我正在使用exhcnage 2007。

谢谢。

【问题讨论】:

    标签: c# outlook exchangewebservices exchange-server-2007


    【解决方案1】:

    您需要定义要获取的属性 - EWS 不允许您枚举用户属性。

    用户属性位于命名空间 PublicStrings 中。

    private static readonly ExtendedPropertyDefinition CustomProperty = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "MyCustomProperty", MapiPropertyType.String);
    

    然后您可以在 FindItems 请求中使用该定义:

    var items = service.FindItems(WellKnownFolderName.Inbox, new ItemView(100) { PropertySet =   new PropertySet(BasePropertySet.FirstClassProperties, CustomProperty)});
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,解决了。

      var customProp1 = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings,
                              "myCustomPropOne", MapiPropertyType.String);
      
      var customProp2 = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings,
                            "myCustomPropTwo", MapiPropertyType.String);
      
      var userFields = new ExtendedPropertyDefinition[] { customProp1, customProp2 };
      
      var extendedPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, userFields);
      
      var contactItems = service.FindItems(WellKnownFolderName.Contacts, new ItemView(100)
                  { PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, extendedPropertySet) });
      // Looping contacts
          foreach (Item item in contactItems){
              object firstProp;              
              if (item.TryGetProperty(customProp1, out firstProp) && firstProp != null)
              {
                     var val = firstProp.ToString();
              }
              object secondProp;
              if (item.TryGetProperty(customProp2, out secondProp) && secondProp != null)
              {
                     var val = secondProp.ToString();
              }
           } // loop ends
      

      myCustomPropOnemyCustomPropTwo 是您在 Outlook/编辑器中设置的用户定义属性的名称。 ref

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-26
        • 2023-03-05
        • 2013-12-03
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 2021-05-06
        相关资源
        最近更新 更多