【问题标题】:EWS Managed API find items with ItemIDEWS 托管 API 查找具有 ItemID 的项目
【发布时间】:2023-03-11 18:41:01
【问题描述】:

我正在尝试在给定项目唯一 ID 的情况下从已删除项目文件夹中查找项目

ItemId id = new ItemId("zTK6edxaI9sb6AAAQKqWHAAA");
SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(ItemSchema.Id, id);
ItemView view = new ItemView(10);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Subject);
FindItemsResults<Item> results = _ExchangeService.FindItems(WellKnownFolderName.DeletedItems, filter, view);
Console.WriteLine(results.TotalCount);

这段代码返回一个异常说:

Validation failed.
Parameter name: searchFilter

如果我搜索带有主题的消息,则相同的代码可以工作。

【问题讨论】:

    标签: c# exchange-server ews-managed-api


    【解决方案1】:

    如果您已经知道 ItemId,则无需使用 FindItems

    EmailMessage email = EmailMessage.Bind(service, new ItemId(StringItemId));
    

    【讨论】:

    • 你知道有什么方法可以确保ID之前存在,这样Bind方法就不会出现在不再存在的项目上吗?
    • 这太棒了!帮助我在 PoweShell 中找出文件夹名称。 [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, [Microsoft.Exchange.WebServices.Data.FolderId]("************************ ******"))
    【解决方案2】:

    您无法搜索诸如 ItemId 之类的 ComplexProperty。我假设 Item.Bind 由于项目被移动而无法工作,这改变了 ItemId?

    如果是这种情况,那么您需要在另一个属性上使用 SearchFilter。如果这些是您通过 EWS 创建的项目,您可以为每个项目附加一个唯一的扩展属性,并在需要搜索时使用它。

    【讨论】:

    • 是的,ItemID 的更改被证明是致命的,我意识到它不是一种可靠的机制来将移动到其他文件夹(如收件箱)的项目与已删除的项目相关联。
    • 扩展属性将在 Outlook 中的项目副本上被无条件复制,使唯一 ID 不再唯一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多