Некоторые особенности протокола IMAP: 1. Письма хранятся на сервере. Клиентская программа может держать у себя копии некоторых писем. 2. Возможна работа нескольких пользователей с одним и тем же почтовым ящиком - как поочерёдно, так и одновременно. 3. Возможна работа в почтовой программе в автономном режиме (без подключения к серверу). Следствия: между двумя сеансами связи программы с сервером возможны изменения в составе писем в папках как на стороне клиента, так и на сервере. Поэтому после установления связи с сервером необходима синхронизация состояния почты. А что могло произойти с почтой? 1. На сервере появилось письмо, которого раньше не было. 2. С сервера исчезло письмо, которое раньше там было. 3. На сервере существовавшее ранее письмо было скопировано или перемещено в какую-то папку. 4. На сервере изменились атрибуты письма. 5. В программе было удалено письмо. 6. В программе существовавшее ранее письмо было скопировано или перемещено в какую-то папку. 7. В программе изменились атрибуты письма. Приоритет при синхронизации - за той стороной, где произошло изменение в состоянии конкретного письма. Коллизии возможны, в общем-то, только при копировании/перемещении между папками. Но в IMAP на самом деле письма хранятся не разложенными по папкам, а одной большим линейным списком. Принадлежность же письма к той или иной папке задаётся тегом. Причём таких тегов у письма одновременно может быть несколько (с точки зрения пользователя - одно и то же письмо находится в нескольких папках сразу). Т.е., проблема коллизий на самом деле решается элементарно. |