IMAP - извлечение предыдущего и следующего UID - PullRequest
2 голосов
/ 08 октября 2010

Используя стандартные спецификации IMAP-команд, как я могу определить предыдущий и следующий UID в почтовом ящике на основе переданного UID, сортируя сообщения почтового ящика по дате, сначала самые новые?

Ответы [ 5 ]

8 голосов
/ 25 декабря 2013

Я нашел UID новой почты с кодом ниже.

   @Override
        public void messagesAdded(MessageCountEvent e) {
         try {
             long newMailUID = ((IMAPFolder) e.getSource()).getUIDNext()
         } catch (MessagingException e1) {
             e1.printStackTrace();
         }
       }
3 голосов
/ 05 февраля 2011

Предполагая, что «сортировка сообщений почтового ящика по дате, сначала самые новые» относится ко времени, когда сообщения были добавлены в почтовый ящик, а не INTERNALDATE или заголовок Date:

A001 SEARCH UID 82342
* SEARCH 83
A001 OK SEARCH completed

A002 FETCH 82,84 UID
* FETCH 82 (UID 82309)
* FETCH 84 (UID 82343)
A002 OK FETCH completed

На что обратить внимание:

  • Если UID не существует в почтовом ящике, SEARCH не вернет результатов.
  • Если UID соответствует первому / последнему сообщению в почтовом ящике, не пытайтесь получить его до / после, иначе вы получите ответ BAD.

Если вы предпочитаете не использовать SEARCH, вы также можете выполнить UID-последовательность через UID FETCH:

A001 UID FETCH 82342 UID
* FETCH 83 (UID 82342)
A001 OK UID FETCH completed
2 голосов
/ 10 октября 2010

Я думаю, что единственным способом было бы сначала запросить все UID:

UID SEARCH ALL

... и сортировка. Каждому сообщению, добавленному в почтовый ящик, назначается более высокий UID, чем сообщениям, которые были добавлены ранее.

Так что более высокий UID = новый адрес электронной почты.

0 голосов
/ 25 декабря 2013

Если вы хотите найти UID до 12345, эта команда сделает это:

a UID SEARCH RETURN (MAX) UID 1:12344

Поиск следующего после:

b UID SEARCH RETURN (MIN) UID 12346:*

Для этого требуется расширение ESEARCH , которое внедряется большинством современных серверов. В частности, Gmail реализует это. Это слишком дорого, чтобы выпускать в цикле, поэтому, возможно, вам лучше решить свою проблему другим способом. Вот последовательность из двух команд для получения 50 UID, непосредственно предшествующих 12345:

c1 SEARCH UID 12345
* SEARCH 1000
c1 OK done
c2 UID SEARCH 950:999
* SEARCH 12200,12202,...
c2 OK done

950 - «результат c1 - 50», 999 - «результат c1 - 1».

0 голосов
/ 08 октября 2010

Я не знаком с точными командами, но вы проверили RFC?

http://tools.ietf.org/html/rfc3501

Похоже, есть команда UIDNEXT, которую вы можете отправить, которая дает вамследующий UID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...