Gmail IMAP Javamail 搜索 returns 网络没有消息

Gmail IMAP Javamail search returns no messages where web does

我正在对一个通过电子邮件发送链接的 Web 应用程序进行负载测试。我有一个专门设置为收件人的 gmail 帐户。生成新帐户时,我向收件人电子邮件添加一个 guid(例如 loadtest_nmndbiwpdi@gmaildomain.com)。当我执行测试时,它要么完全成功,要么完全失败,但失败似乎是随机的。

这是我的搜索片段:

        if (!inbox.isOpen()) {
            inbox.open(Folder.READ_ONLY);
        }

        SearchTerm toTerm = new RecipientTerm(RecipientType.TO, new InternetAddress(to));
        messages = inbox.search(toTerm);

虽然脚本是 运行,但它会在 100 次迭代循环中执行此操作,并暂停 3 秒。当打开 imap 调试时脚本输出失败时,重复显示以下内容:

A4 SEARCH TO loadtest_nmndbiwpdi@gmaildomain.com ALL
* SEARCH
A4 OK SEARCH completed (Success)

但没有实际结果。然而,在执行期间,我可以在 gmail 中搜索该收件人,它会立即弹出。有什么深入了解的建议吗?

Gmail 并未完全实现 IMAP 规范,尤其是在搜索方面。 Gmail 搜索总是搜索整个单词,尽管这在这里应该不是问题。

您可以尝试使用 Gmail-specific support in JavaMail, e.g., the GmailRawSearchTerm class.

我实现了本地缓存。我在负载测试场景开始时对其进行初始化,下载最后几天的消息并捕获最后消息的 UID(使用 gmail imap 插件)。每当会话查找电子邮件时,它都会在本地缓存中查找。如果它不存在,它会设置一个标志,以便其他会话不会重叠缓存并检索最新消息。

因为是断断续续的,想放几天。过去 4 天 运行 非常完美。我可能可以做得更好,在新邮件的文件夹上设置一个侦听器,但现在我很满意 gmail 只是返回 'success' 但在连续进行了这么多 imap 搜索后没有进行搜索。

感谢大家的反馈和建议!