IMAP协议命令(详细)
参照:
转载:
IMAP命令详解!
1.
<TAG>CREATE <folder>
CREATE可以创建指定名字的新邮箱。邮箱名称通常是带路径的⽂件夹全名。(有些IMAP客户机使⽤邮件夹称呼新邮箱)
C: A003 CREATE owatagusiam/
S: A003 OK CREATE completed
C: A004 CREATE owatagusiam/blurdybloop
S: A004 OK CREATE completed
2.
<TAG>DELETE <folder>
DELETE命令删除指定名字的⽂件夹。⽂件夹名字通常是带路径的⽂件夹全名,当邮箱被删除后,其中的邮件也不复存在。
C: A683 DELETE blurdybloop
S: A683 OK DELETE completed
C: A684 DELETE foo
S: A684 NO Name "foo" has inferior hierarchical names
C: A685 DELETE foo/bar
S: A685 OK DELETE Completed
3.
<TAG>RENAME <old folder><new folder>
RENAME命令可以修改⽂件夹的名称,它使⽤两个参数:当前邮箱名和新邮箱名,两个参数的命名符合标准路径命名规则。
C: A683 RENAME blurdybloop sarasoop
S: A683 OK RENAME completed
C: A684 RENAME stuff/junk newbox
S: A684 OK RENAME Completed
4.
<TAG>LIST <BASE><template>
LIST命令⽤于列出邮箱中已有的⽂件夹,有点像操作系统的列⽬录命令,有两个参数,邮箱路径参数BASE:表⽰⽤户登陆⽬录;第⼆个参数template:表⽰希望显⽰的邮箱名。这个命令可以包含起始的路径位置和需要列出的⽂件夹所符合的特征,可以使⽤通配符"*"。
C: A101 LIST "" ""
S: * LIST (\Noselect) "/" ""
S: A101 OK LIST Completed
C: A102 LIST #newsp.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
5.
<TAG>APPEND <folder><attributes><date/time><size><mail data>
APPEND命令允许Client上载⼀个邮件到指定的Folder(⽂件夹/邮箱)中。命令中包含了新邮件的属性、⽇期/时间、⼤⼩,随后是邮件数据。
C: A003 APPEND saved-messages (\Seen) {310}
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
6.
<TAG>SELECT <folder>
SELECT命令让Client选定某个邮箱(Folder),表⽰即将对该邮箱(Folder)内的邮件作操作。邮箱标志的当前状态也返回给了⽤户,同时返回的还有⼀些关于邮件和邮箱的附加信息。
C: A142 SELECT INBOX
S: * 172 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 12] Message 12 is first unseen
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: A142 OK [READ-WRITE] SELECT completed
7.
<TAG>FETCH <mail id><datanames>
FETCH命令⽤于读取邮件的⽂本信息,且仅⽤于显⽰的⽬的。包含两个参数,messageset:表⽰希望读取的邮件号列表,IAMP服务器邮箱中的每个邮件都有⼀个唯⼀的ID标识,(邮件号列表参数可以是⼀个邮件号,也可以是由逗号分隔的多个邮件号,或者由冒号间隔的⼀个范围),IMAP服务器返回邮件号列表中全部邮件的指定数据项内容。
数据名参数确定能够被独⽴返回的邮件的⼀部分,下⾯我们看看各参数返回的邮件信息:
ALL:只返回按照⼀定格式的邮件摘要,包括邮件标志、RFC822.SIZE、⾃⾝的时间和信封信息。IMAP客户机能够将标准邮件解析成这些信息并显⽰出来。
BODY:只返回邮件体⽂本格式和⼤⼩的摘要信息。IMAP客户机可以识别这些细腻,并向⽤户显⽰详细的关于邮件的信息。其实是⼀些⾮扩展的BODYSTRUCTURE的信息。
FAST:只返回邮件的⼀些摘要,包括邮件标志、RFC822.SIZE、和⾃⾝的时间。
FULL:同样的还是⼀些摘要信息,包括邮件标志、RFC822.SIZE、⾃⾝的时间和BODYSTRUCTURE的信息。BODYSTRUCTURE:是邮件的[MIME-IMB]的体结构。这是服务器通过解析[RFC-2822]头中的[MIME-IMB]各字段和 [MIME-IMB]头信息得出来的。包括的内容有:邮件正⽂的类型、字符集、编码⽅式等和各附件的类型、字符集、编码⽅式、⽂件名称等等。
ENVELOPE:信息的信封结构。是服务器通过解析[RFC-2822]头中的[MIME-IMB]各字段得出来的,默认各字段都是需要的。主要包括:⾃⾝的时间、附件数、收件⼈、发件⼈等。
FLAGS:此邮件的标志。
INTERNALDATE:⾃⾝的时间。
RFC822.SIZE:邮件的[RFC-2822]⼤⼩
RFC822.HEADER:在功能上等同于BODY.PEEK[HEADER],
RFC822:功能上等同于BODY[]。
RFC822.TEXT:功能上等同于BODY[TEXT]
UID:返回邮件的UID号,UID号是唯⼀标识邮件的⼀个号码。
BODY[section] <<partial>>:返回邮件的中的某⼀指定部分,返回的部分⽤section来表⽰,section部分包含的信息通常是代表某⼀部分的⼀个数字或者是下⾯的某⼀个部分:HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT。如果section部分是空的话,那就代表返回全部的信息,包括头信息。
BODY[HEADER]返回完整的⽂件头信息。
BODY[HEADER.FIELDS ()]:在⼩括号⾥⾯可以指定返回的特定字段。
BODY[HEADER.FIELDS.NOT ()]:在⼩括号⾥⾯可以指定不需要返回的特定字段。
BODY[MIME]:返回邮件的[MIME-IMB]的头信息,在正常情况下跟BODY[HEADER]没有区别。
BODY[TEXT]:返回整个邮件体,这⾥的邮件体并不包括邮件头。
现在我们遇到了⼀个问题,如果我们要单独提取邮件的附件怎么办?
通过以上的命令我们是⽆法做到的,但是我们别忘了在section部分还有其他的⽅式可以来表⽰我们要提取的邮件的部分,那就的通过区段数来表⽰。那下⾯就让我们来看看什么是区段数。
每个邮件都⾄少有⼀个区段数,Non-[MIME-IMB]型的邮件和non-multipart [MIME-IMB]的邮件是没有经过MIME编码之后的信息的,那这样的信息只有⼀个区段数1。多区段型的信息被编排成⼀个连续的区段数,这和实际信息⾥出现的是⼀样的。如果⼀个特定的区段有类型信息或者是多区段的,⼀个MESSAGE/RFC822类型的区段也含有嵌套的区段数,这些区段数是指向这些信息区段的信息体的。
说了那么多拗⼝的,现在我们讲的更简单易懂⼀些。在⼀个邮件体⾥⾯,区段数1代表的邮件的正⽂,区段数⼆代表的是第⼀个附件,区段数三代表的是第⼆个附件,以此类推。在这些区段⾥,如果有哪个区段⼜是多区段的,⽐如2区段的内容格式是mulipart或者是MESSAGE/RFC822类型的,那么这个区段⼜嵌套了多个⼦区段,嵌套的各⼦区段是⽤2.1,2.2……等等表⽰,类似,如果2.1⼜有嵌套,那么还会有2.1.1,2.1.2等区段。这样的嵌套是没有限制的。下⾯我们通过例⼦来了解⼀下fetch具体是怎么按区段下载的。
HEADER ([RFC-2822] header of the message)
TEXT ([RFC-2822] text body of the message) MULTIPART/MIXED
1 TEXT/PLAIN
2 APPLICATION/OCTET-STREAM
3 MESSAGE/RFC822
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/MIXED
4.2.1 TEXT/PLAIN
4.2.2 MULTIPART/ALTERNATIVE
4.2.2.1 TEXT/PLAIN
4.2.2.2 TEXT/RICHTEXT
如果我们需要取第⼀个附件,那么命令就是:
C:a2 fetch 4 body[2];
取第三个区段的第⼀个⼦区段⽂本正⽂,命令就是:
C:a2 fetch 4 body[3.1];
取第四个区段的第⼆个⼦区段再嵌套的第⼀个⼦区段的⽂本正⽂,命令如下:
C:a2 fetch 4 body[4.2.1]
当然这个例⼦只是针对于⼀个特殊的邮件结构,⼀般的邮件应该都没有这么复杂的结构。
再接下来我们再看看最后⼀个参数有什么⽤?BODY[section]可以使⽤partial字段进⾏修改,该字段包含两个⽤“.”隔开的数字,第⼀个数字、是⼋进制表⽰的希望显⽰的数据输出起始位置,第⼆个数字是⼋进制表⽰希望显⽰的数据长度。这项功能可以进⼀步设定输出格式,例如,如果你希望显⽰1号邮件中邮件提的前1500个字符,可以使⽤命令:
FETCH 1 BODY[TEXT]<0.1500>
该命令取回邮件提的前1500个字符并定义为TEXT,如果邮件体少于1500个字符则返回整个邮件体。
例:
C: 100 FETCH 3:5 BODY[header.fields (Date From Subject)]
S: A100 OK FETCH completed
C: A101 FETCH BODY[TEXT]
S:* This is the fourth test message for IMAP
S: A101 OK FETCH completed
FETCH命令是IMAP协议⾥最复杂的命令。FETCH的命令参数很多、很复杂,但基本的特征是允许将邮件按照MIME结构拆解为零碎的部件来提取。例如,可以利⽤FETCH命令提取邮件头、某⼀个附件、或某⼀邮件附件头部的某⼀字段,等等。
BODY.PEEK [<section>] <<partial>>:
在缺省设置时,宏BODY[<section>]<<partial>>会设置邮件的\SEEN标志。如果你想在不设置\SEEN标志的情况下阅读邮件的部分信息,那么可以将该宏替代BODY .PEEK[section],后者完成同前者⼀样的功能但不会设置该邮件的\SEEN标志。
8.
<TAG>STORE <mail id><new attributes>
STORE命令⽤于修改指定邮件的属性,包括给邮件打上已读标记、删除标记,等等。STORE命令当前只有两个数据项类型可
⽤,FLAGS:表⽰邮件的⼀组标志;FLAGS.SLIENT,表⽰⼀组邮件的标志,通过在两种数据项前加上加号或者减号可以进⼀步改变它们的执⾏情况,加号表⽰数据项的值添加到邮件中,减号表⽰将数据项的值从邮件中删除。
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
9.
<TAG>CLOSE
CLOSE命令表⽰Client结束对当前Folder(⽂件夹/邮箱)的访问,关闭邮箱该邮箱中所有标志为、DELETED的邮件就被从物理上删除。CLOSE没有命令参数。随后可以SELECT另⼀Folder。
C: A341 CLOSE
S: A341 OK CLOSE completed
10.
<TAG>EXPUNGE
EXPUNGE命令在不关闭邮箱的情况下删除所有的标志为、DELETED的邮件。EXPUNGE删除的邮件将不可以恢复。
C: A202 EXPUNGE
11.
<TAG>EXAMINE <mailbox>
EXAMINE命令以只读⽅式打开邮箱,参数是需要打开的邮箱的名字,使⽤EXAMINE命令打开的邮箱不
允许对邮件进⾏改动,因此不能增加或删除邮件的标志。
12.
<TAG>SUBSCRIBE <mailbox>
SUBSCRIBE命令⽤来在客户机的活动邮箱列表中增加⼀个邮箱,该命令只有⼀个参数,希望添加的邮箱名。
C: A114 SUBSCRIBE new/anotherbox
S: A114 OK SUBSCRIBE completed
13.
<TAG>UNSUBSCRIBE <mailbox>
UNSUBSCRIBE命令⽤来从活动列表中去掉⼀个邮箱,⼀个参数:希望去掉的邮箱名。
C: A115 UNSUBSCRIBE new/anotherbox
S: A115 OK SUBSCRIBE completed
14.
<TAG>LSUB <folder><mailbox>
LSUB命令修正了LIST命令,LIST返回⽤户$HOME⽬录下所有的⽂件,但LSUB命令只显⽰那些使⽤SUBSCRIBE命令设置为活动邮箱的⽂件。两个参数:邮箱路径和邮箱名。
C: A116 LSUB “” *
S:* LSUB () “/” stuff/junk
S:* LSUB () “/” neebox
S:* LSUB () “/” new/anotherbox
S: A116 OK LSUB completed
15.
<TAG>STATUS <mailbox>(<parameter1> < parameter2> ……<parameter5>)
STATUS命令查询邮箱的当前状态。第⼀个参数是需要查询的邮箱名,第⼆个参数是客户机需要查询的项⽬列表(要查询显⽰的信息),当在圆括号中。STATUS可以在不使⽤SELECT命令(打开邮箱)或者EXAMINE(以只读⽅式打开邮箱)前提下获取邮箱的信息。
STATUS命令可以获得的数据项
里面包含具体那些协议?项⽬说明
MESSAGE 邮箱中的邮件总数
RECENT 邮箱中标志为\RECENT的邮件数
UIDNEXT 可以分配给新邮件的下⼀个UID
UIDVALIDITY 邮箱的UID有效性标志
UNSEEN 邮箱中没有被标志为\UNSEEN的邮件数
C: A117 STATUS inbox (message recent unseen)
S:* STATUS inbox (MESSAGE 1 RECENT 0 UNSENN 0)
S: A117 OK STATUS completed
16.
<TAG>CHECK
CHECK命令⽤来在邮箱设置⼀个检查点。没有参数。就是IMAP中的sync命令。任何未完成的操作,例如从服务器内存向硬盘写数据,都将会被做完以保持邮箱的⼀致性状态。该命令确保乃村中的磁盘缓冲数据都被写到了磁盘上。
17.
<TAG>SEARCH [CHARSET specification] (search criteria)
命令可以根据搜索条件在处于活动状态的邮箱中搜索邮件,然后显⽰匹配的邮件编号。字符集标志参数[CHARSET specification]由CHARSET和注册的字符集标志符组成,缺省的标志符是US-ASCⅡ,所以该参数长省略。search criteria:查询条件参数,明确查询的关键字和值。查询关键字有⼏⼗种。
C: A119 SEARCH header subject another
S: SEARCH 1 2
S:* A119 OK SEARCH completed
C: A121 SEARCH UNSEEN
S: *SEARCH 1 2
S: A121 OK SEARCH completed
以上每个例⼦都在邮件头的Subject:字段中查询⼀个不同的单词。服务器返回条件的邮件号列表,如果没有匹配邮件则返回不带UID的SEARCH单词。
18.
<TAG>COPY <mail id><mailboxname>
COPY命令可以把邮件从⼀个邮箱复制到另⼀个邮箱,两个参数:mail id是希望从活动邮箱中复制的邮件的标号,mailboxname是希望邮件被复制到的邮箱。
IAMP没有定义移动邮件的命令,移动操作相当于先把邮件复制到新邮箱中,然后对源邮箱中的邮件设置\DELETED标志。下⼀次执⾏检查点过后,新邮箱中的邮件被删除,新邮件就被显⽰出来。
19.
<TAG>UID
UID命令和FETCH、COPY、STORE命令或者SEARCH命令⼀起使⽤,它允许这些命令使⽤邮件的UID号⽽不是在邮箱中的顺序号。UID 号是唯⼀标识邮件系统中邮件的32位证书。通常这些命令都使⽤顺序号来标识邮箱中的邮件,使⽤UID可以使IMAP客户机记住不同IMAP会话中的邮件。
20.
<TAG>CAPABILITY
CAPABILITY命令请求返回IMAP服务器⽀持的功能列表,服务器收到客户机发送的CAPABILITY命令后将返回该服务器所⽀持的功能。⽆参数。
21.
<TAG>NOOP
NOOP命令什么也不做,⽤来向服务器发送⾃动命令,防⽌因长时间处于不活动状态⽽导致连接中断,服务器对该命令的响应始终为肯定。⽆参数。
22.
<TAG>LOGOUT
LOGOUT命令使当前登陆⽤户退出登陆并关闭所有打开的邮箱,任何做了\DELETED标志的邮件都将在这个时候被删除。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论