Skip to main content

6.3.2 SELECT 命令

参数 (Arguments): 邮箱名称

响应 (Responses):

  • 必需的未标记响应:FLAGS, EXISTS, LIST
  • 必需的 OK 未标记响应:PERMANENTFLAGS, UIDNEXT, UIDVALIDITY

结果 (Result):

  • OK - select 完成,现在处于选中状态
  • NO - select 失败,现在处于已认证状态:没有此邮箱,无法访问邮箱
  • BAD - 命令未知或参数无效

SELECT 命令选择一个邮箱,以便可以访问邮箱中的消息。在向客户端返回 OK 之前,服务器必须 (MUST) 向客户端发送以下未标记数据。(各个响应的顺序不重要。) 请注意,此协议的早期版本,例如 [RFC2060] 中指定的 IMAP4rev1 版本,仅要求 FLAGS 和 EXISTS 未标记响应以及 UIDVALIDITY 响应代码。需要与此类较旧的 IMAP 版本保持兼容的客户端实现必须为缺失的数据实现默认行为,如各个项目所讨论的那样。

FLAGS 邮箱中定义的标志。有关更多详细信息,请参阅第 7.3.5 节中 FLAGS 响应的描述。

<n> EXISTS 邮箱中的消息数。有关更多详细信息,请参阅第 7.4.1 节中 EXISTS 响应的描述。

LIST 服务器必须 (MUST) 返回带有邮箱名称的 LIST 响应。邮箱属性列表必须 (MUST) 准确。如果服务器允许非规范化的 UTF-8 邮箱名称 (参见第 5.1 节) 并且提供的邮箱名称与规范化版本不同,则服务器必须 (MUST) 返回带有 OLDNAME 扩展数据项的 LIST。有关更多详细信息,请参阅第 6.3.9.7 节。

OK [PERMANENTFLAGS (<标志列表>)] 客户端可以永久更改的消息标志列表。如果缺少此项,客户端应该假定所有标志都可以永久更改。

OK [UIDNEXT <n>] 下一个唯一标识符值。有关更多信息,请参阅第 2.3.1.1 节。

OK [UIDVALIDITY <n>] 唯一标识符有效性值。有关更多信息,请参阅第 2.3.1.1 节。

一次连接中只能选择一个邮箱;同时访问多个邮箱需要多个连接。SELECT 命令在尝试新选择之前会自动取消选择任何当前选择的邮箱。因此,如果选择了一个邮箱并且尝试了失败的 SELECT 命令,则不会选择任何邮箱。在取消选择已选择的邮箱时,当当前选择的邮箱关闭时,服务器必须 (MUST) 返回带有 "[CLOSED]" 响应代码的未标记 OK 响应 (参见第 7.1 节)。

如果允许客户端修改邮箱,服务器应该 (SHOULD) 在标记的 OK 响应文本前加上 "[READ-WRITE]" 响应代码。

如果不允许客户端修改邮箱但允许读取访问,则邮箱被选择为只读,并且服务器必须 (MUST) 在 SELECT 的标记 OK 响应文本前加上 "[READ-ONLY]" 响应代码。通过 SELECT 进行的只读访问与 EXAMINE 命令的不同之处在于,某些只读邮箱可以 (MAY) 允许在每个用户 (而不是全局) 基础上更改永久状态。在基于服务器的 .newsrc 文件中标记的 Netnews 消息是可以使用只读邮箱修改的此类每用户永久状态的示例。

示例:

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
[...一段时间后...]
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 响应。