在JavaMail中使用SearchTerm

时间:2013-03-02 10:04:51

标签: search javamail

我一直在使用JavaMail开发一个简单的Mail应用程序。我还在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实现还是上面的方法。那么,你们能否分享一下你在这方面的经验,特别是在性能问题上?这花费了太多时间,我不确定问题出在哪里。

的问候,

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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