IMAP EXPUNGE to polecenie tego protokołu trwale usuwające wiadomości wcześniej oznaczone jako skasowane.
IMAP EXPUNGE a trwałe usuwanie wiadomości
IMAP EXPUNGE jest poleceniem protokołu IMAP wykonywanym dla aktualnie wybranej skrzynki pocztowej. Jego zadaniem jest trwałe usunięcie wszystkich wiadomości, które mają ustawioną flagę systemową \Deleted. Samo oznaczenie wiadomości jako usuniętej nie powoduje jeszcze fizycznego usunięcia. Taki mechanizm pozwala klientowi pocztowemu najpierw zmienić stan wiadomości, a dopiero później wykonać operację nieodwracalnego usunięcia.
W podstawowym IMAP4rev1 polecenie ma postać EXPUNGE poprzedzoną identyfikatorem tagu, na przykład A001 EXPUNGE. Serwer odpowiada informacją o zakończeniu polecenia, ale przed odpowiedzią końcową może przesłać klientowi jedną lub wiele nietagowanych odpowiedzi typu * n EXPUNGE. Każda z nich informuje, że wiadomość o określonym numerze sekwencyjnym została usunięta z wybranej skrzynki.
Dwuetapowy model flagi \Deleted i polecenia EXPUNGE
Typowy przebieg usuwania wiadomości w IMAP obejmuje dwa odrębne działania. Najpierw klient ustawia fl agę \Deleted, zwykle za pomocą polecenia STORE, na przykład A002 STORE 125 +FLAGS (\Deleted). Następnie wysyła EXPUNGE, aby serwer usunął wiadomości oznaczone tą flagą. Jeżeli drugi etap nie nastąpi, wiadomość może nadal znajdować się w skrzynce, choć interfejs programu pocztowego może przedstawiać ją jako skasowaną lub ukrytą.
EXPUNGE działa na wszystkich wiadomościach z flagą \Deleted w aktualnie wybranej skrzynce, a nie tylko na tej, którą użytkownik wskazał chwilę wcześniej. Ma to znaczenie, gdy kilka urządzeń korzysta z tego samego konta albo gdy wcześniejsza operacja usuwania pozostawiła wiadomości oznaczone do skasowania. Polecenie może więc trwale usunąć więcej elementów, niż wynikałoby z bieżącego widoku programu, jeśli klient nie odświeżył stanu skrzynki.
W protokole IMAP istnieje także zależność między EXPUNGE a poleceniem CLOSE. Zamknięcie wybranej skrzynki usuwa wiadomości oznaczone \Deleted, jednak serwer nie wysyła w tym przypadku odpowiedzi EXPUNGE opisujących poszczególne usunięcia. Z tego powodu klient powinien po ponownym otwarciu skrzynki pobrać aktualny stan, zamiast zakładać, że wcześniejsze numery wiadomości nadal są prawidłowe.
Numery sekwencyjne, synchronizacja i rozszerzenie UID EXPUNGE
Odpowiedzi EXPUNGE posługują się numerami sekwencyjnymi wiadomości, a nie ich trwałymi identyfikatorami UID. Numer sekwencyjny zależy od bieżącej kolejności elementów w wybranej skrzynce i zmienia się po usunięciu wiadomości. Jeżeli serwer usunie wiadomość o numerze 20, element znajdujący się wcześniej pod numerem 21 może otrzymać numer 20. Klient IMAP musi przetwarzać nietagowane odpowiedzi w kolejności ich otrzymywania i odpowiednio aktualizować własną mapę wiadomości.
Do operacji wykorzystujących trwałe identyfikatory służy rozszerzenie UIDPLUS opisane w RFC 4315, które definiuje między innymi polecenie UID EXPUNGE. Ma ono postać z zestawem UID, na przykład A003 UID EXPUNGE 450:470. Serwer usuwa wtedy tylko wiadomości oznaczone \Deleted, których UID należy do podanego zbioru. Nie usuwa automatycznie innych skasowanych wiadomości znajdujących się w tej samej skrzynce. Jest to istotne zabezpieczenie dla klientów, które chcą usunąć wyłącznie własny zestaw elementów bez wpływania na operacje wykonane przez inne urządzenie.
Klient nie powinien wysyłać UID EXPUNGE bez sprawdzenia możliwości serwera. Obsługa rozszerzeń IMAP jest negocjowana lub wykrywana na podstawie odpowiedzi serwera, dlatego program musi uwzględnić sytuację, w której dostępne jest tylko standardowe EXPUNGE. Błędna obsługa UID i numerów sekwencyjnych może prowadzić do nieaktualnego widoku skrzynki, ponownego wyświetlania usuniętych elementów albo wskazywania niewłaściwej wiadomości przy kolejnej operacji.
Rozpoznawanie skutków EXPUNGE w programie pocztowym
Problemy związane z EXPUNGE często wyglądają jak opóźnione usuwanie, znikanie wiadomości po synchronizacji albo rozbieżność między telefonem a komputerem. Przy analizie należy rozdzielić trzy stany: wiadomość istnieje bez flagi \Deleted, wiadomość istnieje z tą flagą oraz wiadomość została już usunięta przez EXPUNGE albo przez zamknięcie skrzynki. Pomocne jest sprawdzenie, czy program wysyła polecenie STORE, czy następnie wykonuje EXPUNGE i jakie nietagowane odpowiedzi otrzymuje.
Jeżeli wiadomość znika z jednego urządzenia, ale pozostaje na drugim, przyczyną może być lokalny tryb pracy, opóźniona synchronizacja, filtr ukrywający elementy oznaczone \Deleted albo brak odświeżenia po otrzymaniu odpowiedzi serwera. W przypadku pustego folderu „Kosz” nie należy zakładać, że każda aplikacja działa tak samo: część klientów wysyła EXPUNGE natychmiast, część wykonuje je dopiero podczas synchronizacji, a część pozostawia usuwanie do ręcznej operacji użytkownika.
Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnozowaniem problemów z programami pocztowymi, ich synchronizacją oraz konfiguracją podzespołów potrzebnych do stabilnej pracy. W praktyce przydatne jest zabezpieczenie ważnych wiadomości przed testem, sprawdzenie ustawień usuwania w używanym kliencie i porównanie stanu skrzynki po pełnej synchronizacji. Trwałego usunięcia wykonanego przez serwer nie można cofnąć samym ponownym wysłaniem polecenia IMAP.