如果第一次没有结果,Exchange Web Services API findItems在第二次执行时找不到任何内容

时间:2018-01-12 16:40:25

标签: office365 exchangewebservices

我正在编写一个测试(groovy language \ spock framework,如果相关的话)

最初,它使我们的应用程序向特定交换机(相关的办公室365)邮箱发送电子邮件。之后,我需要登录该邮箱并验证应用程序已发送的电子邮件。

我使用EWS Java API与EWS通信(com.microsoft.ews-java-api 2.0)

连接到Exchange服务后,我执行以下操作:

SearchFilter searchFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "search string")
Awaitility.await()
            .atMost(180, TimeUnit.SECONDS)
            .until({
        exchangeService.findItems(WellKnownFolderName.Inbox, searchFilter, new ItemView(1)).totalCount > 0
    })

Awaitility.await()在这里基本上是一个动态等待 - 它会重试代码,直到满足条件。它可以被任何类型的循环替换,具有线程休眠和中断条件。

在第一次尝试时,findItems调用永远不会找到该电子邮件 - 通常需要大约一分钟才能发送电子邮件到达。

问题是,在任何后续尝试中,findItems都无法成功找到该项。但是,如果我在它上面有一个断点,直到我看到邮箱中的电子邮件 - 它成功运行。

所以对我而言,一旦搜索失败(找不到任何东西),再次执行该方法就不会做任何事情。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我建议您在进行FindItem调用之间进行休眠,因为您没有在服务器上给出限制,以便在后续调用之间进行更新。此外,您的SearchFilter是非常耗费资源的,因为它执行Message主体的子串。如果您想跟踪消息的传递,为什么不在发送消息Internet Message ID FROM EWS Managed API Send Email c#时设置InternetMessageId,然后创建一个仅查找具有该Id的消息的SearchFilter。