6.3.2 SELECT 命令
参数: mailbox 名称
响应:
- REQUIRED 的不带标签响应: FLAGS, EXISTS, LIST
- REQUIRED 的 OK 不带标签响应: PERMANENTFLAGS, UIDNEXT, UIDVALIDITY
结果:
- OK - select 已完成, 现在处于 selected 状态
- NO - select 失败, 现在处于 authenticated 状态: 不存在该 mailbox, 或无法访问 mailbox
- BAD - 命令未知或参数无效
SELECT 命令选择一个 mailbox, 以便访问其中的消息. 在向客户端返回 OK 之前, 服务器 MUST 向客户端发送以下不带标签的数据. (各个响应的顺序并不重要.) 注意, 此协议的早期版本, 例如 [RFC2060] 指定的 IMAP4rev1 版本, 只要求 FLAGS 和 EXISTS 不带标签响应以及 UIDVALIDITY response code. 需要保持兼容这些较旧 IMAP 版本的客户端实现, 必须为缺失数据实现默认行为, 如各个条目中所讨论.
FLAGS mailbox 中定义的 flag. 更多细节见第 7.3.5 节中 FLAGS 响应的描述.
<n> EXISTS mailbox 中的消息数量. 更多细节见第 7.4.1 节中 EXISTS 响应的描述.
LIST 服务器 MUST 返回包含 mailbox 名称的 LIST 响应. mailbox attribute 列表 MUST 准确. 如果服务器允许非规范化 UTF-8 mailbox 名称 (见第 5.1 节), 且提供的 mailbox 名称与规范化版本不同, 服务器 MUST 返回带有 OLDNAME 扩展数据项的 LIST. 更多细节见第 6.3.9.7 节.
OK [PERMANENTFLAGS (<list of flags>)] 客户端可以永久更改的消息 flag 列表. 如果缺少此项, 客户端应假定所有 flag 都可以永久更改.
OK [UIDNEXT <n>] 下一个唯一标识符值. 更多信息见第 2.3.1.1 节.
OK [UIDVALIDITY <n>] 唯一标识符有效性值. 更多信息见第 2.3.1.1 节.
在一个连接中同一时间只能选择一个 mailbox; 同时访问多个 mailbox 需要多个连接. SELECT 命令在尝试新的选择之前, 会自动取消选择当前已选择的任何 mailbox. 因此, 如果已经选择了一个 mailbox, 随后尝试执行失败的 SELECT 命令, 则不会有任何 mailbox 被选择. 取消选择已选择的 mailbox 时, 当当前已选择的 mailbox 被关闭时, 服务器 MUST 返回带有 "[CLOSED]" response code 的不带标签 OK 响应 (见第 7.1 节).
如果允许客户端修改该 mailbox, 服务器 SHOULD 在带标签 OK 响应文本前加上 "[READ-WRITE]" response code.
如果不允许客户端修改该 mailbox, 但允许读取访问, 则该 mailbox 以只读方式被选择, 服务器 MUST 在对 SELECT 的带标签 OK 响应文本前加上 "[READ-ONLY]" response code. 通过 SELECT 进行只读访问与 EXAMINE 命令不同, 因为某些只读 mailbox MAY 允许按用户 (而非全局) 更改永久状态. 在基于服务器的 .newsrc 文件中标记的 Netnews 消息, 就是这种可在只读 mailbox 中修改的按用户永久状态示例.
示例:
C: A142 SELECT INBOX
S: * 172 EXISTS
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: * LIST () "/" INBOX
S: A142 OK [READ-WRITE] SELECT completed
示例:
C: A142 SELECT INBOX
S: * 172 EXISTS
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: A142 OK [READ-WRITE] SELECT completed
[...some time later...]
C: A143 SELECT Drafts
S: * OK [CLOSED] Previous mailbox is now closed
S: * 5 EXISTS
S: * OK [UIDVALIDITY 9877410381] UIDs valid
S: * OK [UIDNEXT 102] Predicted next UID
S: * LIST () "/" Drafts
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \Answered \Flagged \Draft \*)] System flags and keywords allowed
S: A143 OK [READ-WRITE] SELECT completed
注意, 符合 IMAP4rev1 的服务器也可以发送在 IMAP4rev2 中已弃用的不带标签 RECENT 响应, 例如 "* 0 RECENT". 建议纯 IMAP4rev2 客户端忽略不带标签的 RECENT 响应.