Команда IMAP COPY - uid и Message-Id - PullRequest
1 голос
/ 24 марта 2011

Я понял, что UID меняется, но Message-Id не будет изменяться во время какой-либо операции с определенной почтой. Однако после некоторых операций я придумал этот случай:

Предположим, у меня есть total of 2000 emails в моем INBOX. Если я скопирую письмо 1000th с UID 1000 и Message-Id 1000 в свой почтовый ящик Trash, а затем скопирую его обратно в INBOX, UID изменится на 2000, а Message-Id на 2000; ток для этой папки. Затем, независимо от даты, электронная почта будет наверху.

Теперь вопрос в том, что если я . fetch 1990:2000 fast (последние 10 писем), я получу именно это письмо среди 10 полученных. Как бы вы получили последние 10 на основе даты без необходимости извлекать 2000 электронных писем, а затем сортировать их по дате?

1 Ответ

2 голосов
/ 24 марта 2011

Если сервер IMAP поддерживает это, вы можете использовать для этого команду SORT, как описано в RFC 5256 . Вероятно, вам нужна конкретная команда:

C: A11 SORT (REVERSE DATE) UTF-8 ALL
S: * SORT 5 3 4 1 2
S: A11 OK SORT completed

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


Если ваш сервер поддерживает расширение SORT (современные серверы IMAP поддерживают), оно будет объявлено в ответ на команду CAPABILITY. Вот ответ от старой версии Courier-IMAP, которую я использую:

CAPABILITY
* CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
  SORT QUOTA LOGIN IDLE ACL ACL2=UNION STARTTLS
...