Exchange Service FindItems API 并不总是找到所有匹配的邮件

本文关键字:API FindItems Service Exchange | 更新日期: 2023-09-27 18:31:11

我有一个程序,每隔几个小时将Office 365 Online邮箱同步一次到数据库集合。 为了下拉最新消息,我正在使用ExchangeService C# API

但是,每隔一段时间,某些联系人的最新消息就不会通过。 当我通过Outlook搜索邮件时,它显示它们没有问题。 但是,通过电子邮件 ID 搜索邮件的 C# 代码找不到它们。

我的搜索字符串中是否缺少条件? 或者也许正在进行一些缓存 - 如何禁用它?

我通常每个搜索结果有 10-20 条消息(这不是数千条)

以下是相关代码:

        foreach (var item in customer.Contacts)
        {
            search.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.ToRecipients, item.Email));
            search.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.CcRecipients, item.Email));
            search.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.From, item.Email));
            search.Add(new SearchFilter.ContainsSubstring(EmailMessageSchema.Sender, item.Email));
            search.Add(new SearchFilter.ContainsSubstring(ItemSchema.DisplayTo, item.Email));
            search.Add(new SearchFilter.ContainsSubstring(ItemSchema.Body, item.Email));
        }
        var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, search.ToArray());
        var inboxCollection = _exchangeClient.FindItems(WellKnownFolderName.Inbox, filter,
                    new ItemView(1000) {PropertySet = PropertySet.FirstClassProperties});

Exchange Service FindItems API 并不总是找到所有匹配的邮件

由于

ContainsSubstring搜索的数量,SearchFilter对于后端服务器来说不是一个非常有效的搜索。我建议您简单地查询,并在客户端过滤更多结果,然后尝试使用如此复杂的查询。例如,您可以在参与者属性和正文 https://msdn.microsoft.com/en-us/library/office/dn579420(v=exchg.150)上使用AQS搜索.aspx它们与您的查询执行相同的操作,并且将使用索引,这将更快。

为什么您看到报告的行为很可能是因为搜索效率低下和搜索的工作方式,当您尝试使用这样的搜索时,这将是对相关文件夹的临时限制,这有点旧,但解释得很好 https://technet.microsoft.com/en-us/library/cc535025(EXCHG.80).aspx .

干杯幽谷