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 に答える