代码之家  ›  专栏  ›  技术社区  ›  Tholle

通过EWS检索Outlook Office365标记属性

  •  0
  • Tholle  · 技术社区  · 10 年前

    在Outlook Office365中,您可以标记单个邮件。

    enter image description here

    切换此标志会产生 updated -中的条目 SyncFolderItems -请求。此属性似乎不属于 Default 属性,甚至 AllProperties ,所以我猜它是一个扩展属性。

    如何通过EWS?我希望支持Exchange 2010。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Yacoub Massad    10 年前

    这是 ItemSchema.Flag 所有物

    使用SyncFolderItems时,请执行以下操作以读取此类属性:

    var property_set = new PropertySet(ItemSchema.Flag, ItemSchema.Id);
    
    var result = service.SyncFolderItems(folder_id, property_set, new ItemId[] { }, 10,
    SyncFolderItemsScope.NormalItems, sync_state);
    
    
    foreach (var result_item in result)
    {
        var flag = result_item.Item.Flag;
    }
    

    这个 flag 变量的类型为 Flag 。请查看其FlagStatus成员,了解如何检测项目是否已标记。

    由于这仅适用于Exchange 2013,因此以下是Exchange 2010的解决方案:

    var flag_property = new ExtendedPropertyDefinition(0x1090 , MapiPropertyType.Integer);
    
    var property_set = new PropertySet(flag_property, ItemSchema.Id);
    
    var result = service.SyncFolderItems(WellKnownFolderName.Inbox, property_set, new ItemId[] { }, 10,
    SyncFolderItemsScope.NormalItems, sync_state);
    
    
    foreach (var result_item in result)
    {
        var flag = result_item.Item.ExtendedProperties.FirstOrDefault(x => x.PropertyDefinition == flag_property);
    
    
        if (flag == null)
        {
            //Item is not flagged    
        }
        else if((int)flag.Value == 1)
        {
            //Item is makred complete
        }
        else if ((int)flag.Value == 2)
        {
            //Item is flagged
        }
    }
    

    这是基于 PidTagFlagStatus 所有物请注意,文档中指出,这将不适用于会议或任务项目。