6.3.6 RENAME 命令
参数 (Arguments):
- 现有邮箱名称
- 新邮箱名称
响应 (Responses): 可选的未标记响应:LIST
结果 (Result):
- OK - rename 完成
- NO - rename 失败:无法使用该名称重命名邮箱,无法重命名为该名称的邮箱
- BAD - 命令未知或参数无效
RENAME 命令更改邮箱的名称。仅当邮箱已被重命名时才返回标记的 OK 响应。尝试从不存在的邮箱名称重命名或重命名为已存在的邮箱名称是错误的。重命名中的任何错误都将返回标记的 NO 响应。
如果名称具有下级层次结构名称,则下级层次结构名称也必须 (MUST) 被重命名。例如,将 "foo" 重命名为 "zap" 将把 "foo/bar" (假设 "/" 是层次结构分隔符) 重命名为 "zap/bar"。
如果服务器的层次结构分隔符出现在新邮箱名称中,则服务器应该 (SHOULD) 创建成功完成 RENAME 命令所需的任何上级层次结构名称。换句话说,在相应命名空间中 "/" 是层次结构分隔符的服务器上,尝试将 "foo/bar/zap" 重命名为 "baz/rag/zowie" 应该 (SHOULD) 创建 "baz/" 和 "baz/rag/" (如果它们尚不存在)。
旧邮箱名称的最高使用的唯一标识符的值必须 (MUST) 被保留,以便使用相同名称创建的新邮箱不会重用先前版本的标识符,除非新版本具有不同的唯一标识符有效性值。有关更多详细信息,请参阅第 6.4.9 节中 UID 命令的描述。
允许重命名 INBOX 并且不会导致标记的 BAD 响应,并且它具有特殊行为:它将 INBOX 中的所有消息移动到具有给定名称的新邮箱,使 INBOX 为空。如果服务器实现支持 INBOX 的下级层次结构名称,则重命名 INBOX 不会影响这些名称。(请注意,某些服务器通过返回标记的 NO 响应来禁止重命名 INBOX,因此客户端需要能够处理此类 RENAME 命令的失败。)
如果服务器允许创建不是有效 Net-Unicode 名称的邮箱名称,则服务器会规范化现有邮箱名称参数和新邮箱名称参数。如果这 2 个参数中任何一个的规范化版本与相应的提供版本不同,则服务器应该 (SHOULD) 返回带有 OLDNAME 扩展数据项的未标记 LIST 响应,其中 OLDNAME 值是提供的现有邮箱名称,name 参数是规范化的新邮箱名称 (参见第 6.3.9.7 节)。这将允许客户端将提供的名称与规范化的名称相关联。
在一个 IMAP 会话中重命名的邮箱可以 (MAY) 使用带有 OLDNAME 扩展数据项的未经请求的 LIST 响应向其他 IMAP 会话宣布。
在上述两种情况下,如果服务器在重命名邮箱时自动订阅邮箱,则每个受影响的已订阅邮箱名称的未经请求的 LIST 响应必须 (MUST) 包含 \Subscribed 属性。不需要为子邮箱发送未经请求的 LIST 响应。当 INBOX 成功重命名时,假定创建了一个新的 INBOX。在这种情况下,不需要为 INBOX 发送未经请求的 LIST 响应。
示例:
C: A682 LIST "" *
S: * LIST () "/" blurdybloop
S: * LIST (\Noselect) "/" foo
S: * LIST () "/" foo/bar
S: A682 OK LIST completed
C: A683 RENAME blurdybloop sarasoop
S: A683 OK RENAME completed
C: A684 RENAME foo zowie
S: A684 OK RENAME Completed
C: A685 LIST "" *
S: * LIST () "/" sarasoop
S: * LIST (\Noselect) "/" zowie
S: * LIST () "/" zowie/bar
S: A685 OK LIST completed
C: Z432 LIST "" *
S: * LIST () "." INBOX
S: * LIST () "." INBOX.bar
S: Z432 OK LIST completed
C: Z433 RENAME INBOX old-mail
S: Z433 OK RENAME completed
C: Z434 LIST "" *
S: * LIST () "." INBOX
S: * LIST () "." INBOX.bar
S: * LIST () "." old-mail
S: Z434 OK LIST completed