3. 状态和流程图
一旦客户端和服务器之间的连接建立, IMAP4rev2 连接就处于四种状态之一. 初始状态由服务器问候标识. 大多数命令只在特定状态下有效. 如果客户端在连接处于不适当状态时尝试命令, 则属于协议错误, 服务器将以 BAD 或 NO 命令完成结果进行响应.
3.1 未认证状态
在未认证状态下, 客户端必须提供认证凭据, 然后才允许执行大多数命令. 除非连接已预先认证, 否则连接启动时会进入此状态.
3.2 已认证状态
在已认证状态下, 客户端已经通过认证, 并且必须先选择要访问的邮箱, 然后才允许执行影响消息的命令. 当预认证连接启动, 提供了可接受的认证凭据, 选择邮箱出错之后, 或成功执行 CLOSE 或 UNSELECT 命令之后, 会进入此状态.
3.3 已选择状态
在已选择状态下, 已选择一个邮箱用于访问. 当邮箱被成功选择时会进入此状态.
3.4 注销状态
在注销状态下, 连接正在终止. 此状态可以由客户端请求 (通过 LOGOUT 命令) 触发, 也可以由客户端或服务器任一方的单方面操作触发.
如果客户端请求注销状态, 则服务器在关闭连接之前必须发送未标记的 BYE 响应, 以及对 LOGOUT 命令的已标记 OK 响应; 客户端在关闭连接之前必须读取对 LOGOUT 命令的已标记 OK 响应.
服务器不应在未先发送包含关闭原因的未标记 BYE 响应的情况下单方面关闭连接. 客户端不应单方面关闭连接; 相反, 它应当发出 LOGOUT 命令.
状态转换图
+----------------------+
|connection established|
+----------------------+
||
\/
+--------------------------------------+
| server greeting |
+--------------------------------------+
|| (1) || (2) || (3)
\/ || ||
+-----------------+ || ||
|Not Authenticated| || ||
+-----------------+ || ||
|| (7) || (4) || ||
|| \/ \/ ||
|| +----------------+ ||
|| | Authenticated |<=++ ||
|| +----------------+ || ||
|| || (7) || (5) || (6) ||
|| || \/ || ||
|| || +--------+ || ||
|| || |Selected|==++ ||
|| || +--------+ ||
|| || || (7) ||
\/ \/ \/ \/
+--------------------------------------+
| Logout |
+--------------------------------------+
||
\/
+-------------------------------+
|both sides close the connection|
+-------------------------------+
图例
- (1) 未预认证的连接 (OK 问候)
- (2) 预认证连接 (PREAUTH 问候)
- (3) 被拒绝的连接 (BYE 问候)
- (4) 成功的 LOGIN 或 AUTHENTICATE 命令
- (5) 成功的 SELECT 或 EXAMINE 命令
- (6) CLOSE 或 UNSELECT 命令, 未请求的 CLOSED 响应码, 或失败的 SELECT 或 EXAMINE 命令
- (7) LOGOUT 命令, 服务器关闭, 或连接关闭