参数:序列集,邮件数据项名称或者宏 响应:非标签化响应:FETCH 结果:OK-fetch完成
NO-fetch错误:不能获取该数据 BAD-未知命令,或者无效参数
FETCH命令获取邮箱中的一个邮件的相关数据。被获取的数据项可以是一个原语,或者一个组合列表。
在正式语法中基于msg-att-static规则确认的大部分数据项,是静态的,并且不能因为任意特定邮件而改变。在正式语法中msg-att-static规则确认的其它数据项,可以改变,或者作为一个STORE命令的一个结果,或者因为外部事件。 例如,如果一个客户端接收到它已经知道的、一个邮件的一个信封,它可以安全地忽略新传送的信封。
有三种宏,它们指明数据项的普遍使用集,并能代替数据项使用。一个宏必须被自身所用,并且不能与其它宏或者数据项连接。 ALL
等效于:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE) FAST
等效于:(FLAGS INTERNALDATE RFC822.SIZE) FULL
等效于:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY) 现在已经定义的、可以被获取的数据项有: BODY
BODYSTRUCTURE的不可扩展形式。 BODY[
一个类型为MEEAGE/RFC822类型的块也有块号,指向MESSAGE块域的块集。 HEADER,HEADER.FIELDS,HEADER.FIELDS.NOT,及TEXT块声明可能是单个块声明,也可能是以一个或者多个 数字型的块声明为前缀――其前提是该数字型的块声明指向一个MESSAGE/RFC822类型的块。MIME块声明必须以一个或者多个数字型的块声明为前 缀。
HEADER,HEADER.FIELDS,及HEADER.FIELDS.NOT块声明指向邮件的[RFC-2822]头部,或者一个内嵌 [MIME-IMT] MESSAGE/RFC822邮件。HEADER.FIELDS和HEADER.FIELDS.NOT其后跟着field- name([RFC-2822]中有定义)名称的一个列表,并返回头部的一个子集。HEADER.FIELDS返回的子集只包括那些带有与列表中的名称之 一相符的一个field-name的头部域;类似地,HEADER.FIELDS.NOT返回的子集只包含带有一个不匹配域名称的头部域。域匹配是不区分 大小写的,除非用别的方法强制。子集化并不把[RFC-2822]定义的、头部和主体之间的空行排除在外;空行包含在所有头部获得中,除非一个邮件没有主 体也没有空行。
MIME块声明指向该块的[MIME-IMB]头部。
TEXT块声明指向邮件的文本主体,不包括[RFC-2822]头部。 这是一个带有它的一些块声明的复杂邮件的一个例子: HEADER ([RFC-2822] header of the message)
TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID 1 TEXT/PLAIN
2 APPLICATION/OCTET-STREAM 3 MESSAGE/RFC2822
3.HEADER ([RFC-2822] header of the message)
3.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXED 3.1 TEXT/PLAIN
3.2 APPLICATION/OCTET-STREAM 4 MULTIPART/MIXED 4.1 IMAGE/GIF
4.1.MIME ([MIME-IMB] header for the IMAGE/GIF) 4.2 MESSAGE/RFC822
4.2.HEADER ([RFC-2822] header of the message)
4.2.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID 4.2.1 TEXT/PLAIN
4.2.2 MULTIPART/ALTERNATIVE 4.2.2.1 TEXT/PLAIN 4.2.2.2 TEXT/RICHTEXT
获取指定文本的一个子串是可能的。这是通过添加一个开的角符(“〈”),请求的第一个字节位置,一个时间,请求的字节的最大数,及一个闭的角符(“〉”)到块声明,来实现的。如果起始字节超出了文本的末尾,则返回一个空的字符串。 试图读取超出文本末尾内容的任何局部获取都会被适当截断。从第0字节开始的一个局部获取都返回局部获取,即使这种截断发生。
注意:这意味着一个1500字节的邮件的BODY[]<0.2048>将返回带有一个大小1500的原义的BODY[]<0>,而不是BODY[]。 注意:一个HEADER.FIELDS或者HEADER.FIELDS.NOT块声明的一个子串获取,在子集化头部之后计算。
/Seen标记是隐含标记;如果这导致标记改变,它们应当作为FETCH响应的一部分被包含进来。
BODY.PEEK[
BODY[
邮件的[MIME-IMB]主体结构。它的计算是由服务器把[MIME-IMB]头部域解释为[RFC-2822]头部和[MIME-IMB]头部。 ENVELOPE
邮件的信封结构。它的计算是由服务器把[RFC-2822]头部解释为组件块,默认为所需要的多个域。 FLASG
为该邮件设置的标记。 INTERNALDATE
邮件的实际日期。 RFC822
功能上等效于BODY[],不同的是,其结果的非标签化FETCH数据(返回RFC822)的语法。
RFC822.HEADER
功能上等效于BODY.PEEK[HEADER],不同的是,其结果的非标签化FETCH数据(返回RFC822.HEADER)的语法。 RFC822.SIZE
邮件的[RFC-2822]大小。 RFC822.TEXT
功能上等效于BODY[TEXT],不同的是,其结果的非标签化FETCH数据(返回RFC822.TEXT)的语法。 UID
邮件的唯一标识符。 例子:
C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) S: * 2 FETCH ?. S: * 3 FETCH ?. S: * 4 FETCH ?.
S: A654 OK FETCH completed
6.4.6. STORE命令
参数:序列集,邮件数据项名称,邮件数据项值 响应:非标签化响应:FETCH 结果:OK-store完成
NO-store错误:不能保存该数据 BAD-未知命令,或者无效参数
STORE命令修改邮箱中邮件相关的数据。正常地,STORE将返回数据更新后的值和一个非标签化FETCH响应。数据项名称中的“.SILENT”后缀保护该非标签化FETCH,且服务器应当假定客户端已经自行决定了该更新后的值,或者客户端不关心该更新后的值。
注意:不管是否使用了“.SILENT”后缀,如果发现一个邮件的标记有源于外部资源的改变,服务器应当发送一个非标签化FETCH响应。目的是使标记的状态在没有竞争的情况下确定。
现在已经定义了的、可以保存的数据项有: FLAGS
用参数替代邮件(不是/Recent)的标记。返回标记集的新值,就像那些标记集的FETCH结果一样。
FLAGS.SILENT
等效于FLAGS,但是不会返回一个新值。 +FLAGS
增加参数至邮件的标记集中。返回标记集的新值,就像那些标记集的FETCH结果一样。
-FLAGS
从邮件的标记集中删除参数。返回标记集的新值,就像那些标记集的FETCH结果一样。
-FLAGS.SILENT
等效于-FLAGS,但是不会返回一个新值。 例子:
C: A003 STORE 2:4 +FLAGS (/Deleted) S: * 2 FETCH (FLAGS (/Deleted /Seen)) S: * 3 FETCH (FLAGS (/Deleted))
S: * 4 FETCH (FLAGS (/Deleted /Flagged /Seen)) S: A003 OK STORE completed
6.4.7. COPY命令
参数:序列集,邮箱名 响应:此命令无需特定响应 结果:OK-copy完成
NO-copy错误:不能复制那些邮件,或者复制到那个名称 BAD-未知命令,或者无效参数
COPY命令复制指定邮件到特定目标邮箱的末尾。在拷贝件中,邮件的标记和实际日期应当被保存,且Recent标记应当被设置。
如果目标邮箱不存在,服务器应当返回一个错误。它不应当自动创建邮箱。除非确实不能创建目标邮箱,否则服务器必须发送响应码 “[TRYCRETAE]”作为标签化NO响应的文本前缀。这暗示客户端,它可以尝试一个CREATE命令,并且如果CREATE成功,它可以重试 COPY。
如果COPY命令因为某种原因不能成功,服务器实现体必须恢复目标邮箱状态到COPY尝试之前的状态。 例子:
C: A003 COPY 2:4 MEETING S: A003 OK COPY completed
6.4.8. UID命令
参数:命令名,命令参数集
响应:非标签化响应:FETCH,SEARCH 结果:OK-UID命令完成 NO-UID命令错误
BAD-未知命令,或者无效参数
UID命令有两种形式。在第一种形式中,它的参数是一个带有相应的一些适当参数的COPY,FETCH,或者STORE命令。不过,参数序列中的数字是唯一标识符,而不是邮件序列号。序列集是许可的,但是有可能唯一标识符不是连续的。
一个不存在的唯一标识符将被忽略,而不会产生任何错误信息。一个UID FETCH命令可能只返回一个OK,没有任何数据;一个UID COPY或者UID STORE可能只返回一个OK,没有任何操作。
在第二种形式中,UID命令的参数是一个带有SEARCH命令参数的SEARCH命令。这些参数的解释同于它们仅仅跟着SEARCH;但是,一 个UID SEARCH命令的一个SEARCH响应返回的数字是唯一标识符,而不是邮件序列号。例如,命令 UID SEARCH 1:100 UID 443:557返回的是,邮件序列的数字队列1:100,及UID队列443:557,这两个序列集的交集相 应的唯一标识符。
注意:在上面的例子中,出现了UID队列443:557。一个不存在的唯一标识符会被忽略,而不会产生任何错误信息,同样的解释也适用于此。因此,即使UID443或者557不存在,这个队列也是有效的,且可以包含一个存在的UID495。 还要注意,一个UID队列559:*永远包括邮箱中最末邮件的UID,即使559大于已分配的任何UID值。这是因为一个队列的内容独立于队列末点的顺序。因此,以*作为一个末点的任意UID队列表示至少一个邮件(该邮件的UID是最大的),除非这个邮箱是空的。
一个非标签化FETCH响应中的“*”后的数字永远是一个邮件序列号,而不是一个唯一标识符,甚至对于一个UID命令响应也是如此。然而,服务 器实现体必须隐式地包括UID邮件数据项作为一个UID命令引发的任意FETCH的响应部分,不管一个UID是否被指定为一个到FETCH的邮件数据项。 注意:包括一个UID邮件数据项作为一个FETCH的响应部分,这个规则主要适用于UID FETCH和UID STORE命令,包括一个不含 UID作为一个邮件数据项的UID FETCH命令。尽管其它UID命令不太可能引发一个非标签化的FETCH,但是这个规则也适用于这些命令。 例子:
C: A999 UID FETCH 4827313:4828442 FLAGS S: * 23 FETCH (FLAGS (/Seen) UID 4827313) S: * 24 FETCH (FLAGS (/Seen) UID 4827943) S: * 25 FETCH (FLAGS (/Seen) UID 4828442) S: A999 OK UID FETCH completed
6.5. 客户端命令-试验/扩展
6.5.1. X命令
参数:已定义的实现体 响应:已定义的实现体 结果:OK-命令完成 NO-失败
BAD-未知命令,或者无效参数
任何以一个X为前缀的命令都是一个试验命令。不属于本文档、本文档的标准修正版或者一个IESG认证的试验标准的一部分的命令,必须用X作为前缀。