4. 数据格式 (Data Formats)
atom 由一个或多个非特殊字符组成.
4.2. 数字 (Number)
number 由一个或多个数字字符组成, 表示一个数值.
4.3. 字符串 (String)
string 有两种形式之一: literal 或 quoted string.literal 形式是 string 的通用形式. quoted string 形式是一种替代形式, 它避免了处理 literal 的开销, 代价是会限制可使用的字符.
literal 是由零个或多个八位组 (包括 CR 和 LF) 组成的序列, 前面以八位组计数进行前缀引用, 形式为左花括号 ("\{"), 八位组数量, 右花括号 ("\}"), 以及 CRLF.对于从服务器传输到客户端的 literals, CRLF 后立即跟随八位组数据. 对于从客户端传输到服务器的 literals, 客户端 MUST 等待收到命令续行请求 (本文档后文描述), 然后再发送八位组数据 (以及命令的剩余部分).
quoted string 是由零个或多个 7-bit 字符组成的序列, 不包括 CR 和 LF, 两端各有一个双引号 (<">) 字符.
空字符串表示为 "" (双引号之间有零个字符的 quoted string), 或表示为 \{0\} 后跟 CRLF (八位组计数为 0 的 literal).
注意: 即使八位组计数为 0, 传输 literal 的客户端也 MUST 等待收到命令续行请求.
RFC 3501 IMAPv4 March 2003
4.3.1. 8-bit 和二进制字符串 (8-bit and Binary Strings)
8-bit 文本邮件和二进制邮件通过使用 [MIME-IMB] content transfer encoding 得到支持. IMAP4rev1 实现 MAY 在 literals 中传输 8-bit 或多八位组字符, 但 SHOULD 仅在 [CHARSET] 已标识时这样做.
虽然定义了 BINARY body encoding, 但不允许未编码的 binary strings."binary string" 是任何包含 NUL 字符的 string.实现 MUST 在传输数据前将二进制数据编码为文本形式, 例如 BASE64.包含过多 CTL 字符的 string MAY 也被视为二进制.
4.4. 带括号列表 (Parenthesized List)
数据结构表示为 "parenthesized list"; 即由空格分隔的数据项序列, 两端由圆括号界定. parenthesized list 可以包含其它 parenthesized lists, 使用多层圆括号表示嵌套.
空列表表示为 () -- 即没有成员的 parenthesized list.
4.5. NIL
特殊形式 "NIL" 表示某个以 string 或 parenthesized list 表示的数据项不存在, 它不同于空字符串 "" 或空 parenthesized list ().
注意: NIL 从不用于任何采用 atom 形式的数据项. 例如, mailbox 名称 "NIL" 是名为 NIL 的 mailbox, 而不是不存在的 mailbox 名称. 这是因为 mailbox 使用 "astring" 语法, 即 atom 或 string.相反, addr-name 为 NIL 表示不存在的个人名称, 因为 addr-name 使用 "nstring" 语法, 即 NIL 或 string, 但绝不是 atom.
RFC 3501 IMAPv4 March 2003
-
操作考虑 (Operational Considerations)
这里列出以下规则, 以确保所有 IMAP4rev1 实现能够正确互操作.
5.1. Mailbox 命名 (Mailbox Naming)
Mailbox 名称是 7-bit.客户端实现 MUST NOT 尝试创建 8-bit mailbox 名称, 并且 SHOULD 将 LIST 或 LSUB 返回的任何 8-bit mailbox 名称解释为 UTF-8.服务器实现 SHOULD 禁止创建 8-bit mailbox 名称, 并且 SHOULD NOT 在 LIST 或 LSUB 中返回 8-bit mailbox 名称. 关于如何表示非 ASCII mailbox 名称, 见第 5.1.3 节.
注意: 8-bit mailbox 名称在本协议早期版本中未定义. 有些站点使用本地 8-bit 字符集表示非 ASCII mailbox 名称. 这种用法不可互操作, 现在已被正式废弃.
不区分大小写的 mailbox 名称 INBOX 是一个保留的特殊名称, 意为 "该用户在此服务器上的主 mailbox".所有其它名称的解释由实现决定.
特别是, 本规范不对非 INBOX mailbox 名称的大小写敏感性持立场. 有些服务器实现完全区分大小写; 有些会保留新创建名称的大小写, 但在其它方面不区分大小写; 还有一些会将名称强制转换为特定大小写. 客户端实现 MUST 能与这些实现中的任何一种交互. 如果服务器实现将非 INBOX mailbox 名称解释为不区分大小写, 它 MUST 按第 5.1.3 节所述, 对使用国际化命名约定的名称进行特殊处理.
创建新 mailbox 名称时, 客户端需要考虑以下事项:
- 任何属于 atom-specials (见 Formal Syntax) 的字符, 都要求 mailbox 名称表示为 quoted string 或 literal.