跳到主要内容

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 章篇幅较长并包含多个小节. 完整命令列表请参考各个小节: