You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取Outlook公用文件夹项目的自定义字段值

使用ExchangeService获取Outlook公用文件夹项目的自定义字段值

核心说明

ExchangeService中自定义字段分两类:UserProperty(客户端添加的自定义属性)和ExtendedProperty(扩展属性)。如果常规属性中找不到,优先通过扩展属性枚举或指定定义来获取。

代码示例

1. 先枚举所有扩展属性(用于定位目标字段)

如果不清楚自定义字段的具体属性信息,先遍历项目的所有扩展属性,拿到对应的属性集ID和标签:

using Microsoft.Exchange.WebServices.Data;
using System;

public void EnumerateExtendedProperties(ExchangeService service, Folder targetPublicFolder)
{
    ItemView itemView = new ItemView(5); // 先取少量项目排查
    itemView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
    itemView.PropertySet.Add(ExtendedPropertyDefinition.AllExtendedProperties);

    FindItemsResults<Item> items = service.FindItems(targetPublicFolder.Id, itemView);

    foreach (Item item in items)
    {
        Console.WriteLine($"项目主题:{item.Subject}");
        Console.WriteLine("扩展属性详情:");
        foreach (ExtendedProperty prop in item.ExtendedProperties)
        {
            Console.WriteLine($"属性集ID:{prop.PropertySetId} | 属性标签:{prop.Tag} | 值:{prop.Value}");
        }
        Console.WriteLine("---");
    }
}

2. 直接获取指定自定义字段

拿到属性集ID和标签后,构造ExtendedPropertyDefinition精准获取值:

public void GetTargetCustomField(ExchangeService service, Folder targetPublicFolder)
{
    // 替换为枚举得到的实际属性集ID和标签
    Guid propSetId = new Guid("你的属性集ID");
    int propTag = 0x1234; // 替换为实际属性标签
    // 根据字段类型调整MapiPropertyType,如Integer、Boolean、DateTime等
    ExtendedPropertyDefinition customFieldDef = new ExtendedPropertyDefinition(propSetId, propTag, MapiPropertyType.String);

    ItemView itemView = new ItemView(10);
    itemView.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, customFieldDef);

    FindItemsResults<Item> items = service.FindItems(targetPublicFolder.Id, itemView);

    foreach (Item item in items)
    {
        item.Load(itemView.PropertySet);
        if (item.TryGetProperty(customFieldDef, out object fieldValue))
        {
            Console.WriteLine($"项目主题:{item.Subject} | 自定义字段值:{fieldValue}");
        }
        else
        {
            Console.WriteLine($"项目主题:{item.Subject} | 未找到目标自定义字段");
        }
    }
}

3. 处理UserProperty类型的自定义字段

如果自定义字段是通过Outlook客户端直接添加的UserProperty,可通过字段名称获取:

public void GetUserPropertyField(ExchangeService service, Folder targetPublicFolder)
{
    string customFieldName = "你的自定义字段名称";
    UserPropertyDefinition userPropDef = new UserPropertyDefinition(customFieldName, MapiPropertyType.String);

    ItemView itemView = new ItemView(10);
    itemView.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, userPropDef);

    FindItemsResults<Item> items = service.FindItems(targetPublicFolder.Id, itemView);

    foreach (Item item in items)
    {
        item.Load(itemView.PropertySet);
        if (item.TryGetProperty(userPropDef, out object fieldValue))
        {
            Console.WriteLine($"项目主题:{item.Subject} | 自定义字段值:{fieldValue}");
        }
    }
}

注意事项

  • 确保ExchangeService已完成身份验证(根据Exchange版本选择OAuth或基本认证)。
  • 匹配自定义字段的MapiPropertyType,避免类型转换错误。
  • 枚举扩展属性时,限制返回项目数量,避免性能损耗。

内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:24