Skip to main content

3. 状态和流程图 (State and Flow Diagram)

一旦客户端和服务器之间建立连接,IMAP4rev2 连接就处于四种状态之一. 初始状态在服务器问候中标识. 大多数命令仅在特定状态下有效. 当连接处于不适当的状态时,客户端尝试执行命令是协议错误,服务器将响应 BAD 或 NO (取决于服务器实现) 命令完成结果.

3.1 未认证状态 (Not Authenticated State)

在未认证状态下,客户端必须 (MUST) 提供认证凭据,然后才能执行大多数命令. 当连接启动时进入此状态,除非连接已预先认证.

3.2 已认证状态 (Authenticated State)

在已认证状态下,客户端已通过认证,并且必须 (MUST) 选择一个邮箱才能访问,然后才能执行影响消息的命令. 当预认证连接启动时、提供可接受的认证凭据后、选择邮箱出错后或成功执行 CLOSE 或 UNSELECT 命令后,进入此状态.

3.3 已选择状态 (Selected State)

在已选择状态下,已选择一个邮箱进行访问. 当成功选择邮箱后进入此状态.

3.4 注销状态 (Logout State)

在注销状态下,连接正在终止. 可以通过客户端请求 (通过 LOGOUT 命令) 或客户端或服务器任一方的单方面操作进入此状态.

如果客户端请求注销状态,服务器必须 (MUST) 在服务器关闭连接之前发送未标记的 BYE 响应和带标记的 OK 响应给 LOGOUT 命令,客户端必须 (MUST) 在客户端关闭连接之前读取 LOGOUT 命令的带标记的 OK 响应.

服务器不应该 (SHOULD NOT) 在没有首先发送包含原因的未标记 BYE 响应的情况下单方面关闭连接. 客户端不应该 (SHOULD NOT) 单方面关闭连接,而应该 (SHOULD) 发出 LOGOUT 命令. 如果服务器检测到客户端已单方面关闭连接,服务器可以 (MAY) 省略未标记的 BYE 响应并直接关闭其连接.

状态转换图

                  +----------------------+
|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 命令、服务器关闭或连接关闭