Przede wszystkim w protokole IMAP nie ma wymogu, który sugerowałby, że FETCH BODYSTRUCTURE
przesłałby pełne dane wiadomości wraz z załącznikami. Albo twoje założenie jest błędne, albo twoja biblioteka IMAP ma poważny błąd, albo używasz tutaj niewłaściwej funkcji.
Po drugie, wspomniałeś o śledzeniu identyfikatorów UID, ale nie powiedziałeś nic o UIDVALIDITY
. Przeczytaj RFC 3501
zrozumieć, co to znaczy. Nie ma możliwości zaimplementowania aplikacji poprawnie mówiącej IMAP bez znajomości protokołu. Dalsze wskazówki są również podane w RFC 4549
.
Twoje trzecie pytanie dotyczy prośby o usunięcie lub przeniesienie elementów. W podstawowym protokole IMAP nie możesz tego zrobić. Jedynym sposobem, aby dowiedzieć się, które wiadomości zostały usunięte, a które są nowo przybyłymi, jest jawne śledzenie identyfikatorów UID — zakładając, że UIDVALIDITY
został podany i nie uległ zmianie, porównujesz listę UID od ostatniego razu z tym, co otrzymałeś teraz i widzisz, które są nowe, a które zniknęły. Ponownie przeczytaj RFC, zawierają odpowiedzi na wszystkie Twoje pytania, a także sugestie, jak zoptymalizować proces synchronizacji. Jest też teza o IMAP
który zawiera znacznie więcej szczegółów na temat dalszego ulepszania czatu protokołu i jakie rozszerzenia są istotne. Nie jest to jednak łatwy projekt.