3. Состояния сервера и команды
Сервер IMAP4rev1 может находиться в одном из 4 состояний. Большая часть команд применима в любом из состояний сервера. Если клиент пытается использовать недоступную в данном состоянии сервера команду, возникает протокольная ошибка и сервер возвращает отклик BAD или NO (в зависимости от реализации сервера).
3.1. Состояние Non-Authenticated
В этом состоянии клиент ДОЛЖЕН свои полномочия прежде, чем передавать какие-либо команды. Это состояние является первым после организации соединения, если соединение не аутентифицировано заранее.
3.2. Состояние Authenticated
В этом состоянии полномочия клиента уже проверены и клиент ДОЛЖЕН выбрать почтовый ящик для работы, прежде, чем подавать серверу какие-либо команды для работы с сообщениями. Это состояние возникает при организации сеанса клиентом с предварительной аутентификацией или после предъявления клиентом корректных полномочий, а также после ошибок при выборе почтового ящика.
3.3. Состояние Selected
В этом состоянии уже выбран почтовый ящик для работы.
3.4. Состояние Logout
В этом состоянии соединение завершается и сервер разрывает связь. Данное состояние может вводиться по запросу клиента или по инициативе сервера.
+--------------------------------------+
| начало соединения и приветствие |
+--------------------------------------+
|| (1) || (2) || (3)
VV || ||
+-----------------+ || ||
|non-authenticated| || ||
+-----------------+ || ||
|| (7) || (4) || ||
|| VV VV ||
|| +----------------+ ||
|| | authenticated |<=++ ||
|| +----------------+ || ||
|| || (7) || (5) || (6) ||
|| || VV || ||
|| || +--------+ || ||
|| || |selected|==++ ||
|| || +--------+ ||
|| || || (7) ||
VV VV VV VV
+--------------------------------------+
| logout и завершение соединения |
+--------------------------------------+
- (1) Соединение без предварительной аутентификации (приветствие OK)
- (2) Соединение с предварительной аутентификацией (приветствие PREAUTH)
- (3) Отвергнутое соединение (приветствие BYE)
- (4) Успешное выполнение команды LOGIN или AUTHENTICATE
- (5) Успешное выполнение команды SELECT или EXAMINE
- (6) Команда CLOSE или ошибка при выполнении команды SELECT или EXAMINE
- (7) Команда LOGOUT, отключение (shutdown) сервера или разрыв соединения.