Ответ 1
Вы хотите использовать UniqueId (UID) для сообщений. Именно поэтому он был создан.
Вам нужно будет отслеживать последний запрошенный UID, а затем, чтобы запросить все новые сообщения, вы используете набор сообщений "[UID]: *", где [UID] является фактическим значением UID.
Например, можно сказать, что последнее сообщение feteched имеет уникальный идентификатор "123456". Вы получите
123456: *
Затем отбросьте первое возвращенное сообщение.
UID "предположительно" должны быть стабильными во всех сессиях и никогда не меняться и всегда увеличиваться. Уловкой для проверки этого является проверка UIDValidity при выборе папки. Если номер UIDValidity не изменился, тогда UID должны быть действительны во всех сеансах.
Вот соответствующие части RFC:
2.3.1.1. Атрибут сообщения уникального идентификатора (UID)
32-битное значение, присвоенное каждому сообщению, которое при использовании с значение уникальности идентификатора (см. ниже) формирует 64-битное значение которые НЕ ДОЛЖНЫ ссылаться на любое другое сообщение в почтовом ящике или следующий почтовый ящик с тем же именем навсегда. Уникальные идентификаторы назначаются строго по возрастанию в почтовом ящике; как каждый сообщение добавляется в почтовый ящик, ему присваивается более высокий UID, чем сообщение (сообщения), которые были добавлены ранее. В отличие от последовательности сообщений числа, уникальные идентификаторы не обязательно должны быть смежными.
Уникальный идентификатор сообщения НЕ ДОЛЖЕН изменяться во время сессии и НЕ ДОЛЖНЫ меняться между сеансами. Любое изменение уникальные идентификаторы между сеансами ДОЛЖНЫ быть обнаружены с помощью Механизм UIDVALIDITY, рассмотренный ниже. Стойкие уникальные идентификаторы необходимы для того, чтобы клиент повторно синхронизировал свое состояние с предыдущим сеанс с сервером (например, отключенный или автономный доступ клиенты); это обсуждается далее в [IMAP-DISC].
Примечание. Следующее уникальное значение идентификатора предназначено для предоставить клиенту средства для определения того, сообщения были доставлены в почтовый ящик, поскольку в предыдущее время он проверил это значение.
Вот ссылка с дополнительной информацией:
http://www.faqs.org/rfcs/rfc3501.html
Что бы я делал, также отслеживает загрузку сообщений InternalDate. Таким образом, если вы когда-либо потеряете синхронизацию UID, вы можете, по крайней мере, перебирать сообщения и находить последнюю загруженную на основе InternalDate сообщения.