Skip to main content

6.3 客户端命令 - 已认证状态 (Client Commands - Authenticated State)

在已认证状态下,允许将邮箱作为原子实体进行操作的命令。在这些命令中,SELECT 和 EXAMINE 将选择一个邮箱进行访问并进入选中状态。

除了通用命令 (CAPABILITY、NOOP 和 LOGOUT) 之外,以下命令在已认证状态下有效:ENABLE、SELECT、EXAMINE、NAMESPACE、CREATE、DELETE、RENAME、SUBSCRIBE、UNSUBSCRIBE、LIST、STATUS、APPEND 和 IDLE。

6.3.1 ENABLE 命令

参数 (Arguments): 能力名称

响应 (Responses): 此命令没有特定响应

结果 (Result):

  • OK - 相关能力已启用
  • BAD - 无参数,或参数中有语法错误

一些 IMAP 扩展允许服务器在某些情况下返回特定于这些扩展的未经请求的响应。但是,服务器无法发送这些未经请求的响应 (除了始终可以发送的标记或未标记的 OK/NO/BAD 响应中包含的响应代码 (参见第 7.1 节)),直到它们知道客户端支持此类扩展,因此能够正确解析和处理扩展响应数据。

ENABLE 命令提供了来自客户端的明确指示,表明它支持特定扩展。它的设计使得客户端可以发送一个包含其支持的扩展的简单常量字符串,服务器将启用双方都支持的共享子集。

ENABLE 命令接受能力名称列表并请求服务器启用命名的扩展。一旦使用 ENABLE 启用,每个扩展将保持活动状态,直到 IMAP 连接关闭。对于每个参数,服务器执行以下操作:

  • 如果参数不是服务器已知的扩展,则服务器必须 (MUST) 忽略该参数。

  • 如果参数是服务器已知的扩展,并且不特别允许使用 ENABLE 启用,则服务器必须 (MUST) 忽略该参数。(请注意,了解扩展并不一定意味着支持该扩展。)

  • 如果参数是服务器支持的扩展并且需要启用,则服务器必须 (MUST) 在连接期间启用该扩展。请注意,一旦启用扩展,就无法禁用它。

如果 ENABLE 命令成功,服务器必须 (MUST) 发送未标记的 ENABLED 响应 (第 7.2.1 节),其中包括如上所述的所有已启用扩展。即使没有启用任何扩展,也会发送 ENABLED 响应。

客户端应该 (SHOULD) 仅包含需要由服务器启用的扩展。例如,当 CAPABILITY 响应中同时通告 IMAP4rev1 和 IMAP4rev2 时,客户端可以启用 IMAP4rev2 特定行为。未来的 RFC 可能会添加到此列表中。

ENABLE 命令仅在已认证状态下有效,在选择任何邮箱之前。客户端不得 (MUST NOT) 在 SELECT/EXAMINE 邮箱后发出 ENABLE;但是,服务器实现不必检查在连接期间是否未选择邮箱或先前是否选择过邮箱。

ENABLE 命令可以在会话中多次发出。它是累加的;也就是说,"ENABLE a b" 后跟 "ENABLE c" 与单个命令 "ENABLE a b c" 相同。当发出多个 ENABLE 命令时,每个相应的 ENABLED 响应应该 (SHOULD) 仅包含相应 ENABLE 命令启用的扩展,即,对于上面的示例,对 "ENABLE c" 的 ENABLED 响应不应包含 "a" 或 "b"。

ENABLE 的流水线处理没有限制。例如,可以发送 ENABLE,然后立即发送 SELECT,或者 LOGIN 之后立即发送 ENABLE。

服务器不得 (MUST NOT) 因执行 ENABLE 而更改 CAPABILITY 列表;也就是说,在 ENABLE 命令之后立即发出的 CAPABILITY 命令必须 (MUST) 列出与在 ENABLE 命令之前发出的 CAPABILITY 命令相同的能力。这在以下示例中得到了演示。请注意,下面的 "X-GOOD-IDEA" 是可以 ENABLED 的虚构扩展能力。

C: t1 CAPABILITY
S: * CAPABILITY IMAP4rev2 ID LITERAL+ X-GOOD-IDEA
S: t1 OK foo
C: t2 ENABLE CONDSTORE X-GOOD-IDEA
S: * ENABLED X-GOOD-IDEA
S: t2 OK foo
C: t3 CAPABILITY
S: * CAPABILITY IMAP4rev2 ID LITERAL+ X-GOOD-IDEA
S: t3 OK foo again

在以下示例中,客户端启用条件存储 (CONDSTORE) 扩展 [RFC7162]:

C: a1 ENABLE CONDSTORE
S: * ENABLED CONDSTORE
S: a1 OK Conditional Store enabled

6.3.1.1 给可能使用 ENABLE 命令的扩展设计者的注意事项

除非没有好的替代设计,否则不鼓励 IMAP 扩展的设计者创建需要 ENABLE 的扩展。具体来说,导致部署的服务器响应可能不兼容的行为更改 (因此受益于 ENABLE) 的扩展比不需要的扩展具有更高的复杂性成本。