imap4协议

来源:互联网 发布:计算机如何编程 编辑:程序博客网 时间:2024/04/28 22:31

转于 http://bambooice.blog.hexun.com/33960499_d.html

IMAP4协议处理状态及工作流程
任何时候,每个IMAP4服务处理线程都处于4种处理状态的其中一种。大部分的IMAP4命令都只会在某种处理状态下才有效。如果IMAP4客户端软件企图在不恰当的状态下发送命令,则服务器将返回协议错误的失败信息,如BAD或NO等等。


非认证状态
在这个状态下,客户软件必须发出认证请求命令。在IMAP4连接建立时,服务器处理线程自动进入这个状态。
认证状态
在认证状态下,客户软件必须选择一个邮箱。这个状态在认证请求命令得到确认答复后进入,或在预认证连接建立后直接进入。
已选择状态
这个状态表示IMAP4客户软件已经选择了某一Folder。在这个状态下可以发送所有检索邮件内容的命令。
离线状态
在这个状态,连接已经终止,服务器将关闭这个连接。客户端软件可以发出命令或由服务器强制进入这个状态。

IMAP命令概要
IMAP协议中的命令与POP3中最大的不同是每条命令前都一有一个由Client指定的标签,同一个会话中,Client发出的每条命令都会有不同的标签;而Server对每个Client发出的命令都必须以相同的标签作应答。这就使得IMAP会话中Client可以同时送出多个命令,而Server则完全可以并发处理这些命令,不必等待上一个命令执行完毕才处理下一个。

下面是若干常用的IMAP命令
LOGIN  username password
LOGIN命令用于登录IMAP服务器,与POP3显著不同的是用户名和口令同时作为参数提交给Server,而POP3完成同样的操作需要USER和PASS两条命令。 
C: a001 LOGIN SMITH SESAME
S: a001 OK LOGIN completed

CREATE  folder
CREATE可以创建指定名字的文件夹。文件夹名字通常是带路径的文件夹全名。
C: A003 CREATE owatagusiam/
S: A003 OK CREATE completed
C: A004 CREATE owatagusiam/blurdybloop
S: A004 OK CREATE completed

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

RENAME old folder  new folder
RENAME命令可以修改文件夹的名称。
C: A683 RENAME blurdybloop sarasoop
S: A683 OK RENAME completed
C: A684 RENAME foo zowie
S: A684 OK RENAME Completed

LIST BASE template
LIST命令用于列出邮箱中已有的文件夹,有点像操作系统的列目录命令。这个命令可以包含起始的路径位置和需要列出的文件夹所符合的特征,可以使用通配符 * 。
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

APPEND folder  attributes 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 <[email]foobar@Blurdybloop.COM[/email]>
C: Subject: afternoon meeting
C: To: [email]mooch@owatagu.siam.edu[/email]
C: Message-Id: <[email]B27397-0100000@Blurdybloop.COM[/email]>
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

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

FETCH …
FETCH命令是IMAP协议里最复杂的命令。FETCH的命令参数很多、很复杂,难以一一列举,但基本的特征是允许将邮件按照MIME结构拆解为零碎的部件来提取。例如,可以利用FETCH命令提取邮件头、某一个附件、或某一邮件附件头部的某一字段,等等。

STORE mail id  new attributes
STORE命令用于修改指定邮件的属性,包括给邮件打上已读标记、删除标记,等等。
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

CLOSE
CLOSE命令表示Client结束对当前Folder的访问,随后可以SELECT另一Folder。
C: A341 CLOSE
S: A341 OK CLOSE completed

EXPUNGE
EXPUNGE将邮箱中所有打了删除标记的邮件彻底删除。EXPUNGE删除的邮件将不可以恢复。 
C: A202 EXPUNGE
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: * 5 EXPUNGE
S: * 8 EXPUNGE
S: A202 OK EXPUNGE completed

LOGOUT
LOGOUT命令结束本次IMAP会话。
C: A023 LOGOUT
S: * BYE IMAP4rev1 Server logging out
S: A023 OK LOGOUT completed
(Server and client then close the connection)


IMAP4会话实例
S: * OK IMAP4rev1 Service Ready
C: a001 login mrc secret
S: a001 OK LOGIN completed
C: a002 select inbox
S: * 18 EXISTS
S: * FLAGS (/Answered /Flagged /Deleted /Seen /Draft)
S: * 2 RECENT
S: * OK [UNSEEN 17] Message 17 is the first unseen message
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: a002 OK [READ-WRITE] SELECT completed
C: a003 fetch 12 full
S: * 12 FETCH (FLAGS (/Seen) INTERNALDATE 17-Jul-1996 02:44:25 -0700
RFC822.SIZE 4286 ENVELOPE (Wed, 17 Jul 1996 02:23:25 -0700 (PDT) IMAP4rev1 WG mtg summary and minutes
((Terry Gray NIL  gray cac.washington.edu)) 
((Terry Gray NIL  gray cac.washington.edu)) 
((Terry Gray NIL  gray cac.washington.edu)) 
((NIL NIL imapcac.washington.edu)) 
((NIL NIL minutes CNRI.Reston.VA.US) 
(John Klensin NIL KLENSIN INFOODS.MIT.EDU)) NIL NIL [email]B27397-0100000@cac.washington.edu[/email]) 
BODY (TEXT PLAIN (CHARSET US-ASCII) NIL NIL 7BIT 3028 92)) 
S: a003 OK FETCH completed
C: a004 fetch 12 body[header]
S: * 12 FETCH (BODY[HEADER] {350}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S: From: Terry Gray <[email]gray@cac.washington.edu[/email]>
S: Subject: IMAP4rev1 WG mtg summary and minutes
S: To: [email]imap@cac.washington.edu[/email]
S: cc: [email]minutes@CNRI.Reston.VA.US[/email], John Klensin <[email]KLENSIN@INFOODS.MIT.EDU[/email]>
S: Message-Id: <[email]B27397-0100000@cac.washington.edu[/email]>
S: MIME-Version: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S: )
S: a004 OK FETCH completed
C: a005 store 12 +flags /deleted
S: * 12 FETCH (FLAGS (/Seen /Deleted))
S: a005 OK +FLAGS completed
C: a006 logout
S: * BYE IMAP4rev1 server terminating connection
S: a006 OK LOGOUT completed

原创粉丝点击