2012-02-05 6 views
14

Piszę skrypt do analizy mojej skrzynki pocztowej i chcę okresowo sprawdzać, czy nie pojawiły się nowe wiadomości. Kryteriami wyszukiwania byłyby: podaj mi identyfikatory UID dla wszystkich wiadomości e-mail z UID większym niż X, gdzie X jest identyfikatorem UID ostatniego przetworzonego e-maila.IMAP: Wyszukiwanie wiadomości z UID większym niż X (lub ogólnie po moim ostatnim wyszukiwaniu)

Lub, bardziej ogólnie, szukam sposobu, aby zobaczyć tylko wiadomości od czasu mojego ostatniego wyszukiwania.

Pamiętaj, że nie szukam wiadomości widzianych/niewidocznych; skrypt otwiera skrzynkę pocztową jako tylko do odczytu i chciałbym, żeby to nie zakłócało moich flag, itp.

Wiem, że mogę określić datę w wyszukiwarce IMAP, ale ziarnistość tego wydaje się być dzień, więc nie dokładnie to, czego potrzebuję.

Zaczynam od Gmaila jako serwera IMAP, ale w przyszłości chcę obsługiwać generyczne serwery IMAP.

Czy istnieje sposób wyszukiwania wiadomości z UID większym niż X? Lub inny sposób określenia wszystkich wiadomości od czasu wiadomości X?

Odpowiedz

16

Możesz użyć SZUKAJ IMAPU dla UID. Zakładając, że ostatnio idące UID jest 1999, myślę, że byłoby to zrobić:

SEARCH UID 2000:*

+0

potwierdził Courier-IMAP – Joril

+1

powinny być zaakceptowane odpowiedź. Również nie jestem pewien, czy zrozumiałem dokładnie RFC: czy jesteśmy w 100% pewni, że dany UID nigdy nie zostanie użyty ponownie w czasie? (usuwanie e-maili, itp.) – lajarre

+1

@lajarre to nie jest coś, co rozumiem wystarczająco, aby odpowiedzieć w pełni. Jeśli poprosisz o to jako oddzielne pytanie w StackOverflow, możesz uzyskać lepszą odpowiedź. Zgodnie z RFC 3501 sekcja 2.3.1.1, UID "NIE MOŻNA zmieniać podczas sesji i NIE POWIODAĆ się między sesjami" i zmiany UID "MUSZĄ być wykrywalne przy użyciu mechanizmu UIDVALIDITY" – SimonMayer

1

Dlaczego nie korzystać z IMAP IDLE do tego?

z IMAP IDLE, serwer ostrzega Cię za każdym razem, gdy nowa wiadomość przybywa

+0

ponieważ nie jest szeroko obsługiwany. i musisz pozostać podłączony? – benchpresser

+0

@benchpresser sposób na odzyskanie starego wątku :) - tak czy inaczej to prawda, wszystko co mówisz, ale do pierwszego punktu mówię "to jest powód, dla którego zapytałem, czy był powód, aby nie używać go w konkretnym przypadku PO", a co do drugiego, Jeśli nie jesteś podłączony, nie możesz przeszukać skrzynki pocztowej. – 537mfb

+0

Ale jeśli wczoraj byłeś podłączony i ponownie się łączyłeś, byłeś połączony i znowu jesteś, ale nie możesz używać IDLE. Ponadto, jeśli twoja aplikacja musi być odporna na przerywane awarie sieci, musisz śledzić stronę klienta. Więc tak, jeśli możesz wspierać IDLE, to czy wspierasz IDLE, jeśli ma to dla ciebie sens, ale nie rozwiązuje to problemu w ogólnym przypadku; i często trzeba wspierać ogólny przypadek, nawet jeśli zechcesz użyć IDLE. – tripleee

Powiązane problemy