RFC3501(imp4协议)中文版(6)

2019-08-17 12:21

重命名INBOX是允许的,并且有特殊的行为。它移动INBOX中的所有邮件至一个给定名称的新邮箱中,INBOX则为空。如果服务器实现体支持INBOX的子级名,则这些不受INBOX重命名的影响。 例子:

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

6.3.6. SUBSCRIBE命令

参数:邮箱

响应:此命令无需特定 结果:OK-subscribe完成

NO-subscribe失败:不能订阅这个邮箱名 BAD-未知命令,或者无效参数

SUBSCRIBE命令增加指定邮箱名至服务器的活动邮箱序列或者订阅邮箱序列中,通过LSUB命令返回。当且仅当订阅成功时,该命令返回一个标签化的OK响应。 服务器可以向SUBSCRIBE证实邮箱参数以确保它的存在。但是,它不能单方面从订阅列表中删除一个存在的邮箱名,即使该邮箱名不存在了。

注意:这个需求是出于,一个服务器可以选择,在一个邮箱名众所周知的邮箱的内容过期后,常规地删除该邮箱(比如,“system-alerts”),以便在新的内容匹配时重新创建它。 例子:

C: A002 SUBSCRIBE #news.comp.mail.mime S: A002 OK SUBSCRIBE completed

6.3.7. UNSUBSCRIBE命令

参数:邮箱名

响应:此命令无需特定响应 结果:OK-unsubscribe完成

NO-unsubscribe失败:不能取消订阅该邮箱名 BAD-未知命令,无效参数

UNSUBSCRIBE从服务器的活动邮箱序列或者订阅邮箱序列中删除特定邮箱名,通过LSUB命令返回。当且仅当取消订阅成功时,该命令返回一个标签化的OK响应。 例子:

C: A002 UNSUBSCRIBE #news.comp.mail.mime S: A002 OK UNSUBSCRIBE completed

6.3.8. LIST命令

参数:引用名,带可能的通配符的邮箱名 响应:非标签化的响应:LIST 结果:OK-list完成

NO-list失败:不能列出该引用或者名称 BAD-未知命令,或者无效参数

LIS命令返回客户端可用的所有名称的完整序列的一个名称子序列。返回0,或者更多的非标签化LIST答复,包含名称属性,层级定义符,和名称;更多细节参看LIST答复的描述。

LIST命令应当迅速返回其数据,没有过度的延时。例如,它不应当节外生枝地计算/Marked或者/Unmarked状态,或者进行其它处理;如果每一个名称需要1秒钟的处理,那么列出1200个名称则需要20分钟!

一个空的(“”空串)引用名参数表明邮箱名是通过SELECT解释的。返回的邮箱名必须与受支持的邮箱名模式匹配。一个非空的引用名参数是一个邮箱名,或者邮箱的一个层级,它指定了被解释的邮箱名的上下文。 一个空的(“”空串)邮箱名参数是为返回层级定义符和引用中所给定名称的根结点名的一个特殊请求。如果引用不是根结点,或者是一个空串,返回作 为根结点的值可能是空串。在所有情况下,都返回一个层级定义符(或者NIL-如果没有层级)。这允许客户端取得层级定义符(或者证实邮箱名是在同一级 的),即使当前没有那个名称的邮箱存在。

引用和邮箱名参数被解释成一个规范形式,它表示成一个清晰的从左到右层级。返回的邮箱名将会在解释形式中。

注意:引用参数的解释是基于实现体定义的。它取决于服务器实现体是否有一个“当前工作目录”,及开头的、可替代当前工作目录的“折断符”的概念, 例如,在一个输出UNIX或者NT文件系统的服务器上,引用参数包含当前工作目录,且邮箱名可能包含被解释成在当前工作目录中的名称。

如果一个服务器没有折断符的概念,则规范形式应是带邮箱名的引用名。注意,如果服务器实现了名称空间的约定(5.1.2一节),则“#”必须被作为折断符对待。

如果服务器参数不是一个邮箱层级(即,它是一个/NoInferiors名称),且/或引用参数不以层级定义符结束,则引用参数的解释是基于实 现体的。例如,一个“foo/bar”的引用和“rag/baz”的邮箱名可以解释成“foo/bar/rag/baz”,“foo/barrage /baz”,或者“foo/rag/baz”。客户端不应当使用这样的一个引用参数,除非有用户的明确请求。一个分层的浏览器不能对服务器的引用解释作任 何的假设,除非引用是一个邮箱层级并且以层级定义符结束。 包含于被解释形式的、引用参数的任何部分应当以被解释形式为前缀。它应当与引用名称参数有相同的形式。这个规则允许客户端决定返回的邮箱名是否 是在引用参数的上下文中,或者邮箱参数的一些相关信息是否可以代替引用参数。没有这个上下文,可能客户端得知道服务器名称语义,包括什么字符串是可以代替 一个名称上下文的折断符。

例如,这里是在一个基于UNIX的服务器上,引用和邮箱名可能被如何解释的一些例子:

引用邮箱名解释

~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/*

开头的三个例子演示了引用参数的上下文中的解释。注意,“~simth/Mail”不应当改成类似“/u2/users/smith/Mail”,否则客户端就不可能断定这个解释是在引用的上下文中。 字符“*”是一个通配符,它匹配其所在位置的0个或者更多的字符。字符“%”类似于“*”,但是它不匹配一个层级定义符。如果“%”通配符是一 个邮箱名参数的最后一个字符,匹配的层级也会返回。如果这些层级不是可选择的邮箱,则它们带着/Noselect邮箱属性返回(更多细节参看LIST响应 的描述)。 允许服务器实现体通过禁止特定的字符或者名称,以免在特定情形下匹配一个通配符,这样就隐藏源于通配符的、不同的可访问邮箱。例如,一个基于UNIX的服务器可以限制“*”的解释,以便一个初始的“/”字符不匹配。

如果对该用户而言INBOX是受该服务器支持的,并且大写字符串“INBOX”匹配带有如上所述通配符的、被解释的参数和邮箱名参数,那么,特 殊名称INBOX包含于LIST的输出。删去INBOX的质疑是,SELECT INBOX是否会返回失败;这无关于用户的真实INBOX是否位于这个服 务器或者其它服务器。 例子:

C: A101 LIST “” “”

S: * LIST (/Noselect) “/” “” S: A101 OK LIST Completed

C: A102 LIST #news.comp.mail.misc “” S: * LIST (/Noselect) “.” #news. S: A102 OK LIST Completed

C: A103 LIST /usr/staff/jones “” S: * LIST (/Noselect) “/” / S: A103 OK LIST Completed C: A202 LIST ~/Mail/ %

S: * LIST (/Noselect) “/” ~/Mail/foo S: * LIST () “/” /Mail/meetings S: A202 OK LIST completed

6.3.9. LSUB命令

参数:引用名,带有可能的通配符的邮箱名 响应:非标签化的响应:LSUB 结果:OK-lsub完成

NO-lsub失败:不能列出那个引用或者名称 BAD-未知命令,或者无效参数

LSUB命令返回的是,用户已经声明为活动的、或者订阅了的名称序列的一个名称子集。0个或者更多的非标签化LSUB答复被返回。LSUB的参数同于LIST的形式。

返回的非标签化LSUB响应可能包含从一个非标签化LIST响应的不同邮箱标记。如果出现这个,那么在非标签化LIST中的标记会被认为是更可信的。 当使用带有%通配符的LSUB时,一种特殊的情形就出现了。试想一下,如果“foo/bar”(带有一个“/”层级定义符)是已订阅的,而 “foo”不是。在LSUB响应中,LSUB的一个“%”通配符必须返回foo,而不是foo/bar,并且它必须标记为带/Noselect属性的。

服务器不能单方面从订阅列表中移除一个已经存在的邮箱名,即使那个名称的邮箱已经不存在了。 例子:

C: A002 LSUB “#news.” “comp.mail.*” S: * LSUB () “.” #news.comp.mail.mime S: * LSUB () “.” #news.comp.mail.misc S: A002 OK LSUB completed

C: A003 LSUB “#news.” “comp.%”

S: * LSUB (/NoSelect) “.” #news.comp.mail S: A003 OK LSUB completed

6.3.10. STATUS命令

参数:邮箱名,状态数据项名 响应:非标签化响应:STATUS 结果:OK-status完成

NO-status失败:没有那个名称的status BAD-未知命令,或者无效参数

STATUS命令请求指定邮箱的状态。它不改变当前被选中的邮箱,也不影响被请求的邮箱中的任何邮件的状态(特别的,STATUS不能使邮件失去/Recent标记)。 STATUS提供了这样一个选择:在没有取消选择第一次IMAP4rev1连接中的当前邮箱的情况下,就打第二次IMAP4rev1连接,并在一个邮箱上进行一个EXAMINE命令以请求那个邮箱的状态。

与LIST命令不同,STATUS命令不一定是快速响应的。在特定条件下,它可能是很慢的。在某些实现体中,服务器被希望以只读方式内部打开邮箱获取特定的状态信息。STATUS命令不接受通配符,这一点也与LIST命令不同。

注意:STATUS命令用于访问邮箱的状态,而不是当前选中的邮箱。因为STATUS命令可以使邮箱被内部打开,且这个信息是可以通过在选中邮箱上的其它手段获取的,所以STATUS命令不应当用于当前选中邮箱。

STATUS命令不能用于“检查选中邮箱中的新邮件”操作(关于检查新邮件的恰当方法的更多信息,参看第7章,7.3.1和7.3.2)。

因为STATUS命令不一定是快速响应的,所以客户端不应当预计能够发出一连串的STATUS命令并获得相应的执行。

当前定义了的、可以请求的状态数据项有: MESSAGES

邮箱中邮件数量。 RECENT

带有/Recent标记位的邮件数量。 UIDNEXT

邮箱的下一个唯一标识符的值。更多信息参看2.3.1.1一节。 UIDVALIDITY

邮箱的唯一标识符检验码。更多信息参看2.3.1.1一节。 UNSEEN

不带有/Seen标记位的邮件数量。 例子:

C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)

S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) S: A042 OK STATUS completed

6.3.11. APPEND命令

参数:邮箱名,OPTIONAL位的组合列表,OPTIONAL日期/时间串,邮件原义 响应:此命令无特定响应 结果:OK-append完成

NO-append错误:不能添加到该邮箱,标记、或者日期/时间、或者邮件文本有错误

BAD-未知命令,或者无效参数

APPEND命令将原义参数像一个新邮件一样添加到指定的目标邮箱末尾。这个参数应当是一个[RFC-2822]邮件的格式。邮件中允许8位字 符串。一个不能正确


RFC3501(imp4协议)中文版(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于大数据时代研究会计信息化风险与防范策略

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: