2015-01-27 2 views
3

Я использую JavaMail 1.5.2 для чтения сообщений из учетных записей IMAP. Для уменьшения количества запросов к хосту я PreFetch некоторым данные сообщений, как From, Date, Message-ID и т.д .:Предварительный предварительный выбор текста из сообщения JavaMail

Folder folder = store.getFolder("inbox"); 
folder.open(Folder.READ_ONLY); 

FetchProfile fp = new FetchProfile(); 
fp.add(FetchProfile.Item.ENVELOPE); 
fp.add(FetchProfile.Item.CONTENT_INFO); 
fp.add("Message-ID"); 

Message msgs[] = folder.getMessages(); 
folder.fetch(msgs,fp); 

Однако, я хочу также упреждающего некоторых части содержания, чтобы создать Предварительный просмотр текста для почты без необходимости загружать полное сообщение со всеми вложениями. Например, я хотел бы предварительно выбрать все части содержимого, которые имеют тип «text/plain» и не являются вложениями. Это возможно?

PS: Я не ищу решение, такое как fp.add(IMAPFolder.FetchProfileItem.MESSAGE), потому что это будет префикс всего сообщение со всеми вложениями.

ответ

1

Прежде всего, вы должны указать retrieve the bodystructure, а затем перебрать структуру сообщений, проверить тип mime каждой части и загрузить нужные части. IMAP позволяет загружать все части с помощью одной команды, поэтому, если Javamail немного умнее, вы должны сделать это с помощью двух команд IMAP, независимо от того, сколько телесных частей вы хотите загрузить.

Команды IMAP, если вы тип, которому нравится смотреть проводной трафик, должно быть чем-то вроде a uid fetch 234789 bodystructure, а затем b uid fetch 234789 (body.peek[1.1] body.peek[2]).

+0

Спасибо за этот очень полезный ответ. Простите, что я смел, но вы можете добавить код Java, который показывает, как создавать и отправлять команду IMAP для извлечения данных сообщений. Я никогда не делал этого раньше, и, вероятно, мне понадобится время, чтобы понять, как это сделать. Похоже, что вы уже делали что-то подобное раньше, я бы очень признателен, если вы можете поделиться каким-то кодом. –

+0

Я делал такие вещи, прежде чем использовать IMAP, но я боюсь, что библиотека Javamail - это еще одна история. Я только что прочитал и изменил код Javamail, но не написал ничего с нуля, поэтому, хотя это может быть всего 10-20 строк, мне потребуется час или больше, и это больше, чем я могу потратить на Stack Overflow. Сожалею. – arnt

+0

Абсолютно никаких причин сожалеть. Я думал, что вы уже написали некоторый код, связанный с JavaMail, для этой проблемы и можете быстро скопировать его здесь. Я очень уверен, что ваш ответ приведет меня к правильному решению моей проблемы. FYI: Я не буду принимать ваш ответ сразу, потому что я хочу ждать 1 или 2 дня для получения дополнительных ответов/решений. –

Смежные вопросы