6. 客户端命令
本节描述 IMAP4rev2 命令. 命令按照允许使用该命令的状态进行组织. 可在多个状态中使用的命令列在最低允许状态中 (例如, 在 authenticated 和 selected 状态中都有效的命令列在 authenticated state commands 中).
命令参数在以下命令描述中以 "Arguments:" 标识, 这里按功能而非语法描述. 命令参数的精确语法见 "Formal Syntax" (第 9 节).
某些命令会导致返回特定服务器响应; 这些响应在以下命令描述中以 "Responses:" 标识. 有关这些响应的信息见 "Responses" (第 7 节) 中的响应描述, 其精确语法见 "Formal Syntax" (第 9 节). 任何命令都有可能导致服务器数据被传输. 因此, 不特别要求服务器数据的命令会写作 "no specific responses for this command", 而不是 "none".
命令描述中的 "Result:" 指命令可能产生的带标签 status 响应, 以及这些 status 响应的任何特殊解释.
连接状态只会由文档明确说明会改变状态的成功命令改变. 被拒绝的命令 (BAD 响应) 永远不会改变连接或已选择 mailbox 的状态. 失败的命令 (NO 响应) 通常不会改变连接或已选择 mailbox 的状态, SELECT 和 EXAMINE 命令除外.
6.1 客户端命令 - 任意状态
以下命令在任意状态下有效: CAPABILITY, NOOP 和 LOGOUT.
6.1.1 CAPABILITY 命令
参数: 无
响应: REQUIRED 的不带标签响应: CAPABILITY
结果:
- OK - capability 已完成
- BAD - 参数无效
CAPABILITY 命令请求服务器支持的 capability 列表 (例如扩展和/或服务器行为修改). 在带标签 OK 响应之前, 服务器 MUST 发送一个不带标签的 CAPABILITY 响应, 且 "IMAP4rev2" 是列出的 capability 之一.
以 "AUTH=" 开头的 capability 名称表示服务器支持 Simple Authentication and Security Layer (SASL) [SASL] 中定义的特定认证机制. 根据定义, 所有此类名称都是本规范的一部分.
其他 capability 名称指本规范的扩展, 修订或增补. 更多信息见第 7.2.2 节中 CAPABILITY 响应的文档. 如果未通告 IMAP4rev1 capability, 则除本规范定义的基础 IMAP4rev2 集合外, 没有任何 capability 会在客户端未显式采取动作调用该 capability 的情况下被启用. 如果同时通告 IMAP4rev1 和 IMAP4rev2 capability, 则除 [RFC3501] 指定的基础 IMAP4rev1 集合外, 没有任何 capability 会在客户端未显式采取动作调用该 capability 的情况下被启用.
客户端和服务器实现 MUST 在明文端口上实现 STARTTLS (第 6.2.1 节) 和 LOGINDISABLED capability. 客户端和服务器实现还 MUST 在明文端口和 Implicit TLS 端口上实现 AUTH=PLAIN (见 [PLAIN]) capability. 重要信息见 Security Considerations (第 11 节).
除非另有说明, IMAP4rev1 的所有已注册扩展也是 IMAP4rev2 的有效扩展.
示例:
C: abcd CAPABILITY
S: * CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI LOGINDISABLED
S: abcd OK CAPABILITY completed
C: efgh STARTTLS
S: efgh OK STARTTLS completed
<TLS negotiation, further commands are under TLS layer>
C: ijkl CAPABILITY
S: * CAPABILITY IMAP4rev2 AUTH=GSSAPI AUTH=PLAIN
S: ijkl OK CAPABILITY completed
6.1.2 NOOP 命令
参数: 无
响应: 此命令没有特定响应 (但见下文)
结果:
- OK - noop 已完成
- BAD - 命令未知或参数无效
NOOP 命令总是成功. 它不执行任何操作.
由于任何命令都可以将 status update 作为不带标签数据返回, NOOP 命令可在非活动期间用作对新消息或消息状态更新的周期性轮询. 如果希望获得 mailbox 状态的实时更新, 应使用 IDLE 命令 (见第 6.3.13 节) 而不是 NOOP. NOOP 命令也可用于重置服务器上的任何非活动自动注销计时器.
示例:
C: a002 NOOP
S: a002 OK NOOP completed
. . .
C: a047 NOOP
S: * 22 EXPUNGE
S: * 23 EXISTS
S: * 14 FETCH (UID 1305 FLAGS (\Seen \Deleted))
S: a047 OK NOOP completed
6.1.3 LOGOUT 命令
参数: 无
响应: REQUIRED 的不带标签响应: BYE
结果:
- OK - logout 已完成
- BAD - 命令未知或参数无效
LOGOUT 命令通知服务器客户端已完成该连接. 服务器 MUST 在带标签 OK 响应之前发送不带标签的 BYE 响应, 然后关闭网络连接.
示例:
C: A023 LOGOUT
S: * BYE IMAP4rev2 Server logging out
S: A023 OK LOGOUT completed
(Server and client then close the connection)
注意: 第 6 章篇幅较长并包含多个小节. 完整命令列表请参考各个小节: