2013-03-02 30 views
0

我一直在使用JavaMail來開發一個簡單的郵件應用程序。我還在JavaMail中使用SearchTerm概念開發了一個簡單的搜索工具。我想通過發件人,收件人,日期,內容或主題搜索電子郵件。所以,我對以上參數有以下示例SearchTerm組合:在JavaMail中使用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實現還是從上面的方法。那麼,你們能分享一下你在這方面的經驗嗎?特別是在性能問題上?這花費了太多時間,我不確定問題出在哪裏。

問候,

回答

1

如果您使用IMAP,搜索是所有完成的服務器上,這樣的表現取決於服務器。如果您使用POP3,則通過將所有消息下載到客戶端並在其中搜索來完成搜索。使用IMAP。 :-)

您可以通過使用帶有所有其他術語的數組的單個OrTerm來簡化您的搜索。不過,我不知道這是否會影響性能。

0

除非您使用Google的IMAP擴展程序,否則您正在本地應用搜索條件。

要搜索用JavaMail在服務器上,你會想要做這樣的事情:這裏

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

一個更完整的例子:http://scandilabs.com/technology/knowledge/How_to_search_gmail_accounts_via_JavaMail_and_IMAP