通过 EWS 检索 Outlook Office365 标记的属性
Posted
技术标签:
【中文标题】通过 EWS 检索 Outlook Office365 标记的属性【英文标题】:Retrieve the Outlook Office365 Flagged property through EWS 【发布时间】:2015-09-14 08:51:32 【问题描述】:在 Outlook Office365 中,您可以标记单个邮件。
切换此标志会在SyncFolderItems
-request 中提供updated
-entry。在获取项目时,该属性似乎不是Default
属性的一部分,甚至不是AllProperties
,所以我猜它是一个扩展属性。
如何通过 EWS 获取它?我想支持 Exchange 2010。
【问题讨论】:
【参考方案1】:这是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 属性。请注意,文档声明这不适用于会议或任务项目。
【讨论】:
这是在 Exchange 2013 中添加的,因此您需要确保您的请求版本指定 Exchange 2013(或更高版本)才能返回 @GlenScales 谢谢大家! Exchange 2010 是否有等价物,因为这是我的目标?我目前正在将布尔值存储在自定义属性中,效果很好,但在我的应用程序之外当然不起作用。 @Tholle,请查看我编辑后的答案,了解 2010 年交换的可能解决方案。 @YacoubMassad 尝试了一个快速的 SOAP 请求,效果很好。只对邮件感兴趣,所以它会很好用。谢谢雅库布!以上是关于通过 EWS 检索 Outlook Office365 标记的属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Outlook 插件中访问 EWS `UniqueId` 字段
Outlook 365 EWS 流式通知 |如何计算发送和接收消息所需的时间?
从 Java 应用程序调用 https://outlook.office365.com/EWS/Exchange.asmx 时出现随机 SSLHandshakeException