Команда IMAP COPY - uid и Message-Id

Разбрах, че 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 имейла и след това да ги сортирате по дата?


person Sergey    schedule 24.03.2011    source източник
comment
Сергей, не си разбрал правилно. Тук са включени 3 части от данните. UID на съобщение е постоянен, докато е в папката (и докато UIDVALIDITY на папката не се променя). Поредният номер на съобщението е неговата позиция в подреден по UID списък със съобщения -- така че ако изтриете съобщение 1 от папката, всички UID остават непроменени, но поредният номер на всяко оставащо съобщение пада с 1. И заглавката Message-ID на съобщението е наистина неизменно -- преместете го в кошчето и обратно, но все още има същата заглавка на ИД на съобщението.   -  person dkarp    schedule 24.03.2011


Отговори (1)


Ако 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
person Martin    schedule 24.03.2011
comment
За съжаление Gmail изглежда не го поддържа. * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE Някакви алтернативи? Благодаря - person Sergey; 24.03.2011
comment
@Sergey: не, ако IMAP сървърът няма поддръжка за сортиране от страна на сървъра, единствената ви възможност е да ги извлечете и сортирате сами. Не е необходимо да изтегляте цели съобщения, но можете да извлечете само техните дати и UID. - person Martin; 24.03.2011
comment
Благодаря! от това се страхувах. Чудя се колко време ще отнеме да извлека само техните дати и UID на 10K съобщения - person Sergey; 24.03.2011
comment
@Sergey: Обикновено е доста бързо. UID FETCH 1:* INTERNALDATE ще ви даде UID и получените дати за всички съобщения в папката. - person dkarp; 24.03.2011