2015-03-18 5 views
0

То, что я хочу добиться:IMAP - JavaMail - Как узнать, какие сообщения обрабатывать?

  • Я кодирование программы Java, которая использует протокол IMAP для подключения к некоторому Gmail счета каждые 5 минут и извлечению информации из некоторых сообщений.
  • Я хочу проверить все сообщения (входящие и исходящие) и взять только те, которые я не обрабатывал. Под «обработанным» я имею в виду не только сообщения «читать» или «видеть». Мое приложение не волнует, обратился ли к нему другой пользователь и не прочитал его. Мое приложение должно отслеживать, какое из них было обработано последним, и в следующий раз, когда он будет проходить через сообщения, начните с первого непроработанного сообщения.
  • Я не хочу ничего менять в сообщениях. Я не хочу отмечать их как увиденные или прочитанные.

Что я реализовал:

  • Установить соединение по протоколу IMAP.
  • Открыть и получить доступ ко всем сообщениям в папке «[Gmail]/Вся почта».

То, что я пробовал:

  • Я читал о UID и номер сообщения, но я не уверен, что любой из них может помочь мне достичь того, чего я хочу. Возможно, UID мог, но: как я могу получить его с помощью JavaMail?
  • Я нашел Folder.getMessages (int start, int end), но я думаю, что это относится к индексу сообщения в папке, который, я считаю, может легко измениться.

Может ли кто-нибудь дать некоторые рекомендации в отношении того, что лучше всего подходит для этого?

Спасибо!

+2

Вы можете использовать UIDs: любое входящее сообщение будет иметь UID выше, чем предыдущее сообщение. Просто запомните самый высокий UID, который вы обработали, и обработайте с более высоким UID. – Max

+0

Спасибо, @Max. Это также относится к отправленным сообщениям? Как я могу получить UID с помощью JavaMail? UID не изменяются, даже если они перемещены в другую папку, не так ли? – cotupha

+0

Эй @ Макс. Это я снова, я нашел интерфейс UIDFolder с двумя его реализациями: GmailFolder и IMAPFolder. Я прочитаю немного больше, чтобы узнать, какой из них будет правильным для меня. Если у Вас есть предложения, пожалуйста, дайте мне знать. Благодаря! – cotupha

ответ

1

IMAP UID относятся к папке, содержащей сообщение. Я не знаю, как Gmail обрабатывает UID для сообщений в папке «[Gmail]/Вся почта», но если он делает правильную вещь, вы можете использовать интерфейс UIDFolder для получения UID. И как описано, как только вы обработали определенный UID, все новые сообщения будут иметь больше UID, что сделает обработку более эффективной.

Альтернативой является использование Message-идентификаторов, который имеет другой набор проблем ...

+1

Gmail делает правильные вещи; использование UID и папка allmail является хорошим решением для этого вопроса. – arnt

+0

Спасибо, @arnt. В настоящее время я реализую это решение, и я сделаю несколько тестов, перемещая сообщения, чтобы увидеть, работают ли UID как ожидалось. У вас есть ссылка на некоторую документацию, где объясняется, как gmail обрабатывает UID в папке «[Gmail]/Вся почта»? – cotupha

+2

№ RFC 3501 указывает, как обрабатывать UID, я просто знаю, что gmail следует спецификации, даже в случае этой папки. (Можно ожидать, что эта папка будет особенной, и это так. Многие клиенты выдают такие команды, как UID FETCH 1: * FLAGS. Сделайте это на большом gmail/allmail, и вы почувствуете особое чувство. Многие клиенты ожидают, что SELECT завершите через секунду или два, что не относится к большой папке allmail. Но это следует за спецификацией.) – arnt