2013-03-02 2 views
0

Я использую JavaMail для разработки простого почтового приложения. Я также разработал простой инструмент поиска, используя концепцию SearchTerm в JavaMail. Я хотел искать электронные письма отправителем, получателем, датой, контентом или предметом. Итак, у меня есть следующие комбинации образцов SEARCHTERM для указанных выше параметров:с помощью SearchTerm в JavaMail

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

Если вы не используете расширения IMAP Google, вы применяете критерии поиска локально.

Для поиска на сервере с 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