Exchange Service FindItems API并不总能找到所有匹配的消息

时间:2016-01-21 02:06:23

标签: c# outlook exchangewebservices

我有一个程序,每隔几个小时就会将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});

1 个答案:

答案 0 :(得分:1)

由于ContainsSubstring搜索次数的原因,SearchFilter对后端服务器的搜索效果不高。我建议你只是你的查询,只是在客户端过滤更多的结果,然后尝试使用这样一个复杂的查询。例如,你可以在参与者属性和Body https://msdn.microsoft.com/en-us/library/office/dn579420(v=exchg.150).aspx上使用AQS搜索,它与你的查询做同样的事情,并且会使用更快的索引。

为什么您会看到报告最有可能的行为,因为搜索效率低,搜索方式有效,当您尝试搜索时,您使用此搜索会对相关文件夹造成临时限制解释得很好https://technet.microsoft.com/en-us/library/cc535025(EXCHG.80).aspx

干杯 格伦