跳到主要内容

6.3.6 RENAME 命令

参数:

  • 现有 mailbox 名称
  • 新 mailbox 名称

响应: OPTIONAL 的不带标签响应: LIST

结果:

  • OK - rename 已完成
  • NO - rename 失败: 无法重命名具有该名称的 mailbox, 或无法重命名为具有该名称的 mailbox
  • BAD - 命令未知或参数无效

RENAME 命令更改 mailbox 的名称. 只有当该 mailbox 已被重命名时, 才返回带标签的 OK 响应. 尝试从不存在的 mailbox 名称重命名, 或重命名为已存在的 mailbox 名称, 都是错误. 重命名期间的任何错误都会返回带标签的 NO 响应.

如果该名称具有下级层级名称, 则下级层级名称也 MUST 被重命名. 例如, 将 "foo" 重命名为 "zap" 会把 "foo/bar" (假设 "/" 是层级分隔符字符) 重命名为 "zap/bar".

如果服务器的层级分隔符字符出现在新 mailbox 名称中, 服务器 SHOULD 创建 RENAME 命令成功完成所需的任何上级层级名称. 换言之, 在对应 namespace 中以 "/" 作为层级分隔符字符的服务器上, 尝试将 "foo/bar/zap" 重命名为 "baz/rag/zowie" 时, 如果 "baz/" 和 "baz/rag/" 尚不存在, SHOULD 创建它们.

旧 mailbox 名称的最高已用唯一标识符值 MUST 被保留, 以便使用相同名称创建的新 mailbox 不会重用前一个实例的标识符, 除非新实例具有不同的唯一标识符有效性值. 更多细节见第 6.4.9 节中 UID 命令的描述.

允许重命名 INBOX, 且不会导致带标签 BAD 响应, 但它具有特殊行为: 它会将 INBOX 中的所有消息移动到具有给定名称的新 mailbox, 并使 INBOX 为空. 如果服务器实现支持 INBOX 的下级层级名称, 这些名称不受 INBOX 重命名影响. (注意, 某些服务器会通过返回带标签 NO 响应来禁止重命名 INBOX, 因此客户端需要能够处理此类 RENAME 命令的失败.)

如果服务器允许创建名称不是有效 Net-Unicode 名称的 mailbox, 则服务器会同时规范化现有 mailbox 名称参数和新 mailbox 名称参数. 如果这 2 个参数中任一参数的规范化版本不同于对应的提供版本, 服务器 SHOULD 返回带有 OLDNAME 扩展数据项的不带标签 LIST 响应, 其中 OLDNAME 值为提供的现有 mailbox 名称, name 参数为规范化后的新 mailbox 名称 (见第 6.3.9.7 节). 这将允许客户端将提供的名称与规范化名称相关联.

在一个 IMAP session 中重命名的 mailbox MAY 使用带有 OLDNAME 扩展数据项的未请求 LIST 响应通告给其他 IMAP session.

在上述两种情况下, 如果服务器在 mailbox 被重命名时自动订阅该 mailbox, 则针对每个受影响的已订阅 mailbox 名称的未请求 LIST 响应 MUST 包含 \Subscribed attribute. 不需要为子 mailbox 发送未请求 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