Skip to main content

6.3.9 LIST 命令

参数 (基本语法 - Arguments basic):

  • 引用名称
  • 带可能通配符的邮箱名称

参数 (扩展语法 - Arguments extended):

  • 选择选项 (可选 - OPTIONAL)
  • 引用名称
  • 邮箱模式
  • 返回选项 (可选 - OPTIONAL)

响应 (Responses): 无标记响应:LIST

结果 (Result):

  • OK - list 完成
  • NO - list 失败:无法列出该引用或邮箱名称
  • BAD - 命令未知或参数无效

LIST 命令从客户端可用的所有邮箱名称的完整集合中返回邮箱名称的子集。返回零个或多个无标记 LIST 响应,包含名称属性、层次分隔符、名称和可能的扩展信息;有关更多详细信息,请参阅 LIST 响应的描述 (第 7.3.1 节)。

LIST 命令应该 (SHOULD) 快速返回其数据,不得有不必要的延迟。例如,它不应该过度计算 \Marked 或 \Unmarked 状态或执行其他处理;如果每个名称需要 1 秒的处理时间,那么 1200 个名称的列表将需要 20 分钟!

扩展 LIST 命令最初在 [RFC5258] 中引入,提供了超越原始 IMAP LIST 命令的功能。如果满足以下一个或多个条件,则使用扩展语法:

  1. 命令名称后的第一个单词以括号开头 ("LIST 选择选项");
  2. 命令名称后的第二个单词以括号开头;
  3. LIST 命令有超过 2 个参数 ("LIST 返回选项")。

空 ("" 字符串) 引用名称参数表示邮箱名称按 SELECT 解释。返回的邮箱名称必须 (MUST) 匹配提供的邮箱名称模式。非空引用名称参数是邮箱的名称或邮箱层次结构的级别,它指示解释邮箱名称的上下文。客户端应该 (SHOULD) 使用空引用参数。

仅在基本语法中,空 ("" 字符串) 邮箱名称参数是返回层次分隔符和引用中给定名称的根名称的特殊请求。如果引用是非根的或为空字符串,则作为根返回的值可以 (MAY) 是空字符串。在所有情况下,都会返回层次分隔符 (如果没有层次结构则为 NIL)。这允许客户端获取层次分隔符 (或发现邮箱名称是扁平的),即使当前不存在该名称的邮箱。

在扩展语法中,任何为空字符串的邮箱名称参数都会被忽略。当使用扩展语法时,空邮箱名称没有特殊含义。

引用和邮箱名称参数被解释为规范形式,该形式表示明确的从左到右的层次结构。返回的邮箱名称将采用解释形式,我们称之为 "规范 LIST 模式":服务器从引用和邮箱名称参数内部构造的规范模式。

**注意:**引用参数的解释是实现定义的。它取决于服务器实现是否具有 "当前工作目录" 和前导 "突破字符" 的概念,这些字符会覆盖当前工作目录。

例如,在导出 UNIX 或 NT 文件系统的服务器上,引用参数包含当前工作目录,邮箱名称参数包含在当前工作目录中解释的名称。

如果服务器实现没有突破字符的概念,规范形式通常是附加邮箱名称的引用名称。请注意,如果服务器实现命名空间约定 (第 5.1.2.1 节),"#" 是突破字符,必须这样对待。

如果引用参数不是邮箱层次结构的级别 (即,它是 \NoInferiors 名称),和/或引用参数不以层次分隔符结尾,则将其解释为依赖于实现。例如,引用为 "foo/bar" 和邮箱名称为 "rag/baz" 可以解释为 "foo/bar/rag/baz"、"foo/barrag/baz" 或 "foo/rag/baz"。除非用户明确请求,否则客户端不应该 (SHOULD NOT) 使用这样的引用参数。分层浏览器必须不 (MUST NOT) 对服务器对引用的解释做任何假设,除非引用是邮箱层次结构的级别并以层次分隔符结尾。

包含在解释形式中的引用参数的任何部分应该 (SHOULD) 作为解释形式的前缀。它也应该 (SHOULD) 与引用名称参数的形式相同。此规则允许客户端确定返回的邮箱名称是否在引用参数的上下文中,或者邮箱参数是否覆盖了引用参数。如果没有此规则,客户端将必须了解服务器的命名语义,包括哪些字符是覆盖命名上下文的 "突破符"。

以下是在基于 UNIX 的服务器上如何解释引用和邮箱名称的一些示例:

引用 (Reference)邮箱名称 (Mailbox Name)解释 (Interpretation)
~smith/Mail/foo.*~smith/Mail/foo.*
archive/%archive/%
#news.comp.mail.*#news.comp.mail.*
~smith/Mail//usr/doc/foo/usr/doc/foo
archive/~fred/Mail/*~fred/Mail/*

上面的前三个示例演示了引用参数上下文中的解释。请注意,"~smith/Mail" 不应该 (SHOULD NOT) 被转换为类似 "/u2/users/smith/Mail" 的内容,否则客户端将无法确定解释是否在引用的上下文中。

字符 "" 是通配符,在此位置匹配零个或多个字符。字符 "%" 与 "" 类似,但它不匹配层次分隔符。如果 "%" 通配符是邮箱名称参数的最后一个字符,则还会返回匹配的层次结构级别。如果这些层次结构级别也不是可选择的邮箱,则使用 \Noselect 邮箱名称属性返回它们 (有关更多详细信息,请参阅 LIST 响应的描述,第 7.3.1 节)。

任何由于任何原因而未被服务器接受的语法有效模式都必须 (MUST) 被静默忽略,即,它不会产生 LIST 响应,并且 LIST 命令仍然返回标记的 OK 响应。

选择选项 (Selection Options) 告诉服务器限制 LIST 操作选择的邮箱名称。如果使用选择选项,返回的邮箱是那些既匹配规范 LIST 模式列表又匹配选择选项的邮箱。除非特定选择选项提供特殊规则,否则选择选项是累积的:匹配邮箱模式的邮箱仅在它也匹配所有选择选项时才被选择。(具有特殊规则的选择选项的一个示例是 RECURSIVEMATCH 选项。)

返回选项 (Return Options) 控制为每个匹配的邮箱返回什么信息。返回选项必须不 (MUST NOT) 导致服务器报告关于除匹配规范 LIST 模式和选择选项的邮箱名称之外的其他邮箱名称的信息。如果未指定返回选项,客户端只期望关于邮箱属性的信息。服务器可以 (MAY) 返回关于匹配邮箱的其他信息,客户端必须 (MUST) 能够处理这种情况。

以下子章节中定义了初始选择选项和返回选项,并且还将在扩展中定义新的选项。必须 (MUST) 支持本文档中定义的初始选项。每个非初始选项将由能力字符串启用 (一个能力可能启用多个选项),并且客户端必须不 (MUST NOT) 发送服务器未通告支持的选项。服务器必须 (MUST) 对它不识别的选项使用 BAD 响应进行响应。客户端不应该 (SHOULD NOT) 多次指定任何选项;但是,如果客户端这样做,服务器必须 (MUST) 表现得好像只接收到该选项一次。客户端指定选项的顺序不重要。

一般来说,除 RECURSIVEMATCH 之外的每个选择选项都将具有同名的相应返回选项。REMOTE 选择选项在这方面是一个异常,没有相应的返回选项。这是因为它扩展而不是限制返回的邮箱集。本规范的未来扩展应牢记这种并行性,并定义一对相应的选择和返回选项。

服务器实现被允许通过防止某些字符或名称在某些情况下匹配通配符,从通配符字符 "隐藏" 否则可访问的邮箱。例如,基于 UNIX 的服务器可能会限制 "*" 的解释,使得初始 "/" 字符不匹配。

特殊名称 INBOX 包含在 LIST 的输出中,如果此服务器为此用户支持 INBOX,并且如果大写字符串 "INBOX" 与如上所述使用通配符的解释引用和邮箱名称参数匹配。省略 INBOX 的标准是 SELECT INBOX 是否会返回失败;用户的真实 INBOX 是否驻留在此服务器或其他服务器上并不相关。