0

一段时间以来,我一直在使用 JavaMail 来开发一个简单的邮件应用程序。我还使用 JavaMail 中的 SearchTerm 概念开发了一个简单的搜索工具。我想按发件人、收件人、日期、内容或主题搜索电子邮件。因此,对于上述参数,我有以下示例 SearchTerm 组合:

SearchTerm searchSenderOrSubjectTerm = new OrTerm(termSender, termSub);         
SearchTerm searchSenderOrDate = new OrTerm(termSender, termRecvDate);
SearchTerm searchSubjectOrSenderOrDate = new OrTerm(searchSenderOrSubjectTerm, searchSenderOrDate);
SearchTerm searchSubjectOrContentOrSenderOrDate = new OrTerm(searchSubjectOrSenderOrDate, termContent);         
SearchTerm searchSubjectOrContentOrSenderOrRecvrOrDate = new OrTerm(searchSubjectOrContentOrSenderOrDate, termRecvr);

//return the search results
 searchResults = folder.search(searchSubjectOrContentOrSenderOrRecvrOrDate);

这工作正常并返回所需的结果。但是这种方法的问题是搜索和返回结果需要花费太多时间。我只是想知道问题是内部 SearchTerm 实现还是来自上述方法。那么,你们能分享我在这方面的经验,尤其是在性能问题上吗?这花费了太多时间,我不确定问题出在哪里。

问候,

4

2 回答 2

1

如果您使用 IMAP,则搜索都是在服务器上完成的,因此性能取决于服务器。如果您使用的是 POP3,则通过将所有消息下载到客户端并在那里进行搜索来完成搜索。使用 IMAP。:-)

您可以通过使用单个 OrTerm 和所有其他术语的数组来简化搜索。但是,我不知道这是否会产生任何性能差异。

于 2013-03-03T08:32:46.047 回答
0

除非您使用 Google 的 IMAP 扩展,否则您将在本地应用搜索条件。

要使用 JavaMail 在服务器上搜索,您需要执行以下操作:

GmailStore store = (GmailStore) session.getStore("gimap");
store.connect("imap.gmail.com", "[your-account@gmail.com", "[your-pw]");
GmailFolder inbox = (GmailFolder) store.getFolder("[Gmail]/All Mail");
inbox.open(Folder.READ_ONLY);
Message[] foundMessages = inbox.search(new GmailRawSearchTerm("to:somebody@email.com"));

这里有一个更完整的例子:http: //scandilabs.com/technology/knowledge/How_to_search_gmail_accounts_via_JavaMail_and_IMAP

于 2014-02-28T21:34:26.727 回答