1. 如何阅读本文档
1.1 本文档的组织方式
本文档从 IMAP4rev2 客户端或服务器实现者的视角编写. 除第 2 节的协议概述外, 它并未针对想要理解协议运行方式的读者进行优化. 第 3, 4 和 5 节提供 IMAP4rev2 运行所依赖的一般上下文和定义.
第 6, 7 和 9 节分别描述 IMAP 命令, 响应和语法. 这些内容之间关系紧密, 几乎无法孤立理解其中任一部分. 尤其不要只根据命令章节推导命令语法, 而应参考 "Formal Syntax" (第 9 节).
1.2 本文档使用的约定
"约定" 指基本原则或过程. 本节说明本文档使用的约定.
在示例中, "C:" 和 "S:" 分别表示客户端和服务器发送的行. 注意, 每一行都包含结尾的 CRLF.
本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", 和 "OPTIONAL", 当且仅当以此处所示的全大写形式出现时, 应按 BCP 14 [RFC2119] [RFC8174] 中的描述解释.
词语 "can" (而非 "may") 用来表示可能的环境或情况, 而不是协议的可选设施.
"User" 指人类用户, 而 "client" 指该用户运行的软件.
"Connection" 指从最初建立网络连接到连接终止期间的完整客户端/服务器交互序列.
"Session" 指从某个邮箱被选中 (SELECT 或 EXAMINE 命令) 到该选择结束 (对另一个邮箱执行 SELECT 或 EXAMINE, CLOSE 命令, UNSELECT 命令, 或连接终止) 期间的客户端/服务器交互序列.
术语 "Implicit TLS" 指只要在服务器专用于 TLS 连接的特定 TCP 端口上建立 TCP 连接, 就自动协商 TLS. "Implicit TLS" 用来与 IMAP 中 STARTTLS 命令形成对比: STARTTLS 由客户端和服务器在已建立的明文 TCP 连接上显式协商 TLS.
除非另有说明, 字符为 8-bit UTF-8 (其中 7-bit US-ASCII 是其子集). 其他字符集使用 "CHARSET" 表示, 如 [MIME-IMT] 所述并由 [CHARSET] 定义. CHARSET 除定义字符集外还具有重要的附加语义; 更多细节请参考这些文档.
IMAP 中存在若干协议约定. 它们指规范中并非严格属于 IMAP 协议, 但反映普遍接受实践的部分. 实现需要了解这些约定, 无论是否实现该约定, 都应避免冲突. 例如, "&" 不能用作层级分隔符, 因为它与 Mailbox International Naming Convention 冲突, 邮箱名中 "&" 的其他用法也会受到影响.
1.3 给实现者的特别说明
强烈建议 IMAP 协议实现者将 IMAP implementation recommendations 文档 [IMAP-IMPLEMENTATION] 与本文档结合阅读, 以帮助理解该协议的复杂细节, 以及如何最好地构建可互操作的产品.
IMAP4rev2 设计为相对于 IMAP4rev1 [RFC3501], IMAP2 [IMAP2] 和未发布的 IMAP2bis [IMAP2BIS] 协议向上兼容. IMAP4rev2 大体兼容 RFC 3501 描述的 IMAP4rev1 协议和 [RFC1730] 描述的 IMAP4 协议; 例外是 [RFC1730] 和 [RFC3501] 中添加的某些设施后来被证明存在问题, 随后被移除或由更好的替代方案取代.
与较早协议中最常见变体 IMAP2bis 相关的其他兼容性问题在 [IMAP-COMPAT] 中讨论. 与 [IMAP2] 罕见变体相关的兼容性问题完整讨论见 [IMAP-HISTORICAL]; 该文档主要具有历史意义.