2016-07-13 2 views
0

Я использую API Javamail для получения электронной почты с сервера IMAP Gmail.Получение электронной почты один за другим с помощью Javamail Api

Я использую Message[] messages = inbox.search(term), чтобы получить все письма с сервера. Вместо этого я хотел получить почту один за другим, чтобы я мог сохранять их в базе данных один за другим, а не получать весь массив, так что другая служба может начать синтаксический анализ электронных писем, а не ждать, пока все электронные письма придут, а затем проанализируют потому что это трудоемкий процесс.

+0

Предположим, вы могли сначала получить список сообщений (https://developers.google.com/gmail/api/v1/reference/users/messages/list), ограничивающие 'maxResults' до 1 - получить сообщение Id и затем выберите его отдельно (https://developers.google.com/gmail/api/v1/reference/users/messages/get) - тогда вам может потребоваться пометить его как 'read' (или что-то - например, добавить ярлык : https://developers.google.com/gmail/api/v1/reference/users/messages/modify) и повторите процесс до тех пор, пока не получите все сообщения. – ochi

+0

@ochi Позвольте мне попробовать, если это сработает. есть ли что-то, что api предлагает для этого? –

+0

Не уверен, что я понимаю ваш вопрос, я добавил соответствующие ссылки API на мой комментарий. Вы ищете что-то еще или говорите о другом API? – ochi

ответ

3

Метод поиска не извлекает данные для всех сообщений с сервера, он получает только номера сообщений соответствующих сообщений с сервера. Возвращаемые объекты Message не содержат данных, пока вы не вызовете метод в объекте Message для запроса некоторых данных; это всего лишь ссылка на сообщение на сервере.

Если вызов поиска происходит слишком медленно, это происходит не потому, что данные для сообщений возвращаются клиенту, потому что сервер медленно ищет сообщения. Вы можете точно увидеть, что клиент запрашивает и что возвращает сервер, включив JavaMail debugging.

Если вы хотите предварительно отбирать больше данных сообщения, а не извлекать их по запросу, вы можете использовать метод Folder.fetch.

+0

Это было очень полезно: D –

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