Soap 通过EWS检索Outlook Office365标记的属性

Soap 通过EWS检索Outlook Office365标记的属性,soap,outlook,exchange-server,exchangewebservices,Soap,Outlook,Exchange Server,Exchangewebservices,在Outlook Office365中,可以标记单个邮件 切换此标志将在SyncFolderItems-请求中提供一个已更新的-条目。在获取项目时,此属性似乎不是默认属性的一部分,甚至不是所有属性的一部分,因此我猜它是一个扩展属性 我如何通过EWS获得它?我想支持Exchange 2010。这是属性 使用SyncFolderItems时,请执行以下操作以读取此类属性: var property_set = new PropertySet(ItemSchema.Flag, ItemSchema.

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

切换此标志将在
SyncFolderItems
-请求中提供一个
已更新的
-条目。在获取项目时,此属性似乎不是
默认属性的一部分,甚至不是
所有属性的一部分,因此我猜它是一个扩展属性

我如何通过EWS获得它?我想支持Exchange 2010。

这是属性

使用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;
}
标志
变量的类型为。查看其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
    }
}

这是基于属性的。请注意,文档中指出,这不适用于会议或任务项目。

这是在Exchange 2013中添加的,因此您需要确保您的请求版本指定了Exchange 2013(或更高版本)以使其生效returned@GlenScales谢谢大家!因为我的目标是Exchange 2010,所以是否有一个等价物?我目前正在自定义属性中存储一个布尔值,该属性工作得很好,但在我的应用程序之外当然不起作用。@Thole,请检查我编辑的答案,以获得exchange 2010的可能解决方案。@YacoubMassad尝试了一个快速SOAP请求,效果很好。只是对邮件感兴趣,所以它会很有用。谢谢你,雅库布!