从 EWS 访问 Outlook 用户属性

3

我想创建一个应用程序,使用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。

那么我该如何获取我要查找的属性呢?

顺便提一下,我正在使用 Exchange 2007。

谢谢。

2个回答

7

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

Userproperties在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)});

0

我曾经遇到过同样的问题,已经解决了。

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/Editor 中设置的用户定义属性的名称。ref


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