在JavaMail中使用SearchTerm
一段时间以来,我一直在使用JavaMail开发一个简单的邮件应用程序。我还使用JavaMail中的SearchTerm概念开发了一个简单的搜索工具。我想按发件人、收件人、日期、内容或主题搜索电子邮件。因此,对于上述参数,我有以下示例SearchTerm组合:在JavaMail中使用SearchTerm,search,jakarta-mail,Search,Jakarta Mail,一段时间以来,我一直在使用JavaMail开发一个简单的邮件应用程序。我还使用JavaMail中的SearchTerm概念开发了一个简单的搜索工具。我想按发件人、收件人、日期、内容或主题搜索电子邮件。因此,对于上述参数,我有以下示例SearchTerm组合: SearchTerm searchSenderOrSubjectTerm = new OrTerm(termSender, termSub); SearchTerm searchSenderOrDate = new OrT
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实现还是来自上述方法。那么,你们能和我分享一下你们在这方面的经验吗,尤其是在性能问题上?这花费了太多的时间,我不确定问题出在哪里
关于,如果您使用的是IMAP,则搜索都在服务器上完成,因此性能取决于服务器。如果您使用的是POP3,则通过将所有消息下载到客户端并在那里进行搜索来完成搜索。使用IMAP:-)
您可以通过使用单个OrTerm和所有其他术语的数组来简化搜索。但是,我不知道这是否会对性能产生任何影响。除非您使用谷歌的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"));
这里有一个更完整的示例: