保存8位数据的服务器执行体必须能够用一个[MIME-IMB]内容转换编码,进行8位APPEND数据与7位(APPEND数据)之 间的可逆转换。
注意:可能有例外,比如,草稿邮件――其中被请求的[RFC-2822]头在APPEND的邮件原义参数中被省略了。这样做的整个关联必须被理解并小心权衡。
如果一个组合列表被声明,则标记位应当在结果邮件中被设置;否则,结果邮件的标记列表默认设置为空。两种情况下,Recent标记都要设置。
如果声明了一个日期-时间,实际日期应当在结果邮件中被设置;否则,结果邮件的实际日期默认设置为当前日期和时间。
如果插入操作因为某种原因不能成功,邮箱必须恢复至APPEND尝试前的状态;不允许局部的插入操作。
如果目标邮箱不存在,服务器必须返回一个错误,且不能自动创建邮箱。除非确定目标邮箱不能被创建,否则,服务器必须发送响应码 “[TRYCREATE]”作为标签化NO响应的文本的前缀。这给客户端一个暗示,即它可以尝试一个CREATE命令,并且,如果CREATE成功,还可 以重试APPEND。
如果邮箱当前被选中,正常的新邮件动作应当发生。特别地,服务器应当通过一个非标签化的EXISTS响应迅速通知客户端。如果服务器不这样做,客户端可以在一个或者多个APPEND命令之后发出一个NOOP命令(或者,NOOP命令失败,发出一个CHECK命令)。 例子:
C: A003 APPEND saved-messages (/Seen) {310} S: + Ready for literal data
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) C: From: Fred Foobar foobar@Blurdybloop.COM C: Subject: afternoon meeting C: To: mooch@owatagu.siam.edu
C: Message-Id: B27397-0100000@Blurdybloop.COM C: MIME-Version: 1.0
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII C:
C: Hello Joe, do you think we can meet at 3:30 tomorrow? C:
S: A003 OK APPEND completed 注意:APPEND命令不用于邮件发送,因为它不支持转换[SMTP]信封信息的机制。
6.4. 客户端命令-被选中状态
在被选中状态,操作一个邮箱中邮件的命令是被允许的。
除了全局命令(CAPABILITY, NOOP, 及LOGOUT),及认证状态命令
(SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, 及 APPEND),在被选中状态时以下命令也是有效 的:CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, 及UID。
6.4.1. CHECK命令
参数:无
响应:此命令无需特定响应 结果:OK-check完成
BAD-未知命令,或者无效参数
CHECK命令请求当前被选中邮箱的一个检查站。一个检查站指向每个取决于实现体的、与邮箱相关联的(例如,以邮箱在硬盘中的状态,决定它在服 务器上的内存中的状态)、并不是作为每个命令的一部分进行常规执行的内部事务。一个检查站可以完成实时的非瞬时数量。如果一个服务器实现体没有这些内部事 务的考虑,CHECK等效于NOOP。
一个EXISTS非标签化响应作为CHECK的一个结果发生,这是不一定的。NOOP,而不是CHECK,应当用于新邮件的投票。 例子:
C: FXXZ CHECK
S: FXXZ OK CHECK Completed
6.4.2. CLOSE命令
参数:无
响应:此命令无需特定响应
结果:OK-close完成,当前是认证状态 BAD-未知命令,或者无效参数
CLOSE命令从当前被选中邮箱中永久删除带有/Deleted标记位的所有邮件,并从被选中状态返回至认证状态。没有非标签化EXPUNGE响应被发送。 如果邮箱通过EXAMINE命令被选中,或者用别的方法以只读方式选中,则没有邮件会被删除,也不会报错。
甚至,一个邮箱被选中,没有预先发送一个CLOSE命令,一个
SELECT, EXAMINE, 或者LOGOUT命令就可以被发出。 SELECT, EXAMINE, 及LOGOUT命令没有进行删除,就暗暗关闭了当前被选中的邮箱。然而,当很多邮件被删除时,一个CLOSE- LOGOUT或者CLOSE-SELECT序列比一个EXPUNGE-LOGOUT或者EXPUNGE-SELECT快得多,因为没有非标签化 EXPUNGE响应(客户端可以适当忽略)被发送。
6.4.3. EXPUNGE命令
参数:无
响应:非标签化响应:EXPUNGE 结果:OK-expunge完成
NO-expunge失败:不能删除(例如,没有权限) BAD-未知命令,或者无效参数
EXPUNGE命令从当前被选中邮箱中永久删除带有/Delted标记位的所有邮件。在返回一个OK到客户端前,每个被删除的的邮件会引发一个非标签化的EXPUNGE响应被发送。 例子:
C: A202 EXPUNGE S: * 3 EXPUNGE S: * 3 EXPUNGE S: * 5 EXPUNGE S: * 8 EXPUNGE
S: A202 OK EXPUNGE complted
注意:在这个例子中,邮件3,4,7,及11带/Deleted标记位。进一步的解释参看EXPUNGE响应的描述。
6.4.4. SEARCH命令
参数:OPTIONAL [CHARSET]声明,检索准则(一个或者多个) 响应:REQUIRED非标签化响应:SEARCH 结果:OK-search完成
NO-search错误:不能检索该[CHARSET]或者准则 BAD-未知命令,或者无效参数
SEARCH命令检索邮箱以获取符合给定准则的邮件。检索准则由一个或者多个检索关键词组成。来自服务器的非标签化SEARCH响应由符合检索准则的邮件相应的邮件序列号列表组成。
当多个关键词被声明时,结果是匹配这些关键词的所有邮件的交集(并起效)。例如,准则 DELETED FROM “SMITH” SINCE 1-Feb-1994 指向来自Smith的、自从1994年2月1日开始存放于邮箱中的所有被删除的邮件。一个检索关键词也可以是一个或者多个检索关键词的一个组合列表(例 如,使用OR和NOT关键词)。
服务器实现体可能拒绝接受带有终端内容媒体类型的[MIM-IMB]主体部分,而接受TEXT和SEARCH匹配集相应的MESSAGE。
OPTIONAL [CHARSET]声明由其后紧跟着一个注册了的[CHARSET]的字“CHARSET”组成。它表示,出现在检索准则中 的字符串的[CHARSET]。在以[CHARSET]而不是US-ASCII比较文本之前,[MIME-IMB]内容转换编码,及在[RFC-
2822]/[MIME-IMB]头部的[MIME-HDRS]字符串,必须被解码。US-ASCII必须受支持;其它的[CHARSET]s可能受支 持。 如果服务器不支持声明了的[CHARSET],它必须返回一个标签化的NO响应(而不是一个BAD)。该响应应当包含BADCHARSET响应码,该响应码可能列出受服务器支持的[CHARSET]s。
在字符串形式的所有检索关键词里,如果该字符串是该范围的一个子串,则邮件符合该关键词。匹配是不区分大小写的。
已定义的检索关键词如下。参数的准确语法定义参看正式语法一节。
带有已声明的邮件序列号集相应的邮件序列号的邮件。 ALL
邮件中所有邮件;ANDing的默认初始关键词。 ANSWERED
带有/Answered标记位的邮件。
BCC
在信封结构的BCC域包含有指定字符串的邮件。 BEFORE
实际日期(忽视时间和时区)早于指定日期的邮件。 BODY
在邮件的主体域包含有指定字符串的邮件。 CC
在信封结构的CC域包含有指定字符串的邮件。 DELETED
带有/Deleted标记位的邮件。 DRAFT
带有/Draft标记位的邮件。 FLAGGED
带有/Flagged标记位的邮件。 FROM
在信封结构的FROM域包含有指定字符串的邮件。 HEADER
带有一个含指定field-name([RFC-2822]中定义)的头部、且在该头部(它跟在colon之后)的文本中包含指定字符串的邮 件。如果将要检索的字符串(参数中的string)长度为零,那么,它将匹配带有一个含指定field-name、内容可有可无的头部行的所有邮件。 KEYWORD
带有指定关键词标记位的邮件。 LARGER
带有一个[RFC-2822](定义)的、大于指定字节数的大小的邮件。 NEW
带有/Recent标记位,但不带有/Seen标记的邮件。它在功能上等效于“(RECENT UNSEEN)”。 NOT
不符合指定检索关键词的邮件。 OLD
不带有/Recent标记位的邮件。它在功能上等效于“NOT RECENT”(与“NOT NEW”相反)。 ON
实际日期(忽视时间和时区)在指定日期的邮件。 OR
带有/Recent标记位的邮件。 SEEN
带有/Seen标记位的邮件。 SENTBEFORE
[RFC-2822]Date: header(忽视时间和时区)早于指定日期的邮件。 SENTON
[RFC-2822]Date: header (忽视时间和时区)在指定日期的邮件。 SENTSINCE
[RFC-2822]Date: header (忽视时间和时区)在指定日期或者晚于指定日期的邮件。
SINCE
实际日期(忽视时间和时区)在指定日期或者晚于指定日期的邮件。 SMALLER
带有一个[RFC-2822]的、小于指定字节数大小的邮件。 SUBJECT
在信封结构的SUBJECT域含有指定字符串的邮件。 TEXT
在邮件的头部或者主体含有指定字符串的邮件。 TO
在信封结构的TO域含有指定字符串的邮件。 UID
带有指定唯一标识符集相应的唯一标识符的邮件。序列集顺序排列是允许的。 UNANSWERED
不带有/Answered标记位的邮件。 UNDELETED
不带有/Deleted标记位的邮件。 UNDRAFT
不带有/Draft标记位的邮件。 UNFLAGGED
不带有/Flagged标记位的邮件。 UNKEYWORD
不带有指定关键词标记位的邮件。 UNSEEN
不带有/Seen标记位的邮件。 例子:
C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM “Smith” S: * SEARCH 2 84 882
S: A282 OK SEARCH completed
C: A283 SEARCH TEXT “string not in mailbox” S: * SEARCH
S: A283 OK SEARCH completed
C: A284 SEARCH CHARSET UTF-8 TEXT {6} C: XXXXXX
S: * SEARCH 43
S: A284 OK SEARCH completed
注意:因为本文档限制于7位ASCII文本,所以不可能显示真的UTF-8。“XXXXXX”可能是实际处理中的8位数据的6个字节。
6.4.5. FETCH命令