zoukankan      html  css  js  c++  java
  • IMAP4协议简介

     

    IMAP4协议简介
    IMAP是斯坦福大学在1986年开发的,它是一个开放的标准,被设计成POP的超集,而POP是个地位牢固的开放邮件标准。IMAP标准的最新版是IMAP第4版修订版1(RFC 2060)。IMAP第4版修订版1与IMAP4的实际差别仅仅在于前者提高了拨号链路的性能。有关IMAP4标准的详细信息请参见华盛顿大学的IMAP主页(www.washington.edu/imap/)。尽管在日常使用中,IMAP的特性及对它的支持还没有压倒POP3,但是它的发展趋势已经显而易见了。主要的群件产品厂商都计划支持IMAP4。
    根据定义,POP3是个存储转发的信息交换系统。POP3邮件服务器把消息发送给客户,自己并不在服务器上保存副本。与之不同,IMAP4是个客户机/服务器模式的应用。无论是POP3还是IMAP4,进来的邮件都存储在中央的邮件服务器上。用户使用遵循协议的邮件客户软件来连接到邮件服务器上,先进行身份验证,鉴定登录名和口令,然后用户才获得访问邮箱的权利。但是,二者的共性仅限于此。

    与POP3不同,IMAP4能以三种模式或者说消息传送范式来与客户进行交互:离线、在线和断连方式。此外,IMAP4可以让用户访问多个私用和共享邮箱。
    在离线方式中,客户软件把邮箱存储在本地硬盘上以进行读取和撰写信息的工作。当需要发送和接受消息时,用户才连接服务器。对于那些长期奔波、很少停留在某个固定处所的人,他们通常使用离线方式。POP3典型地以离线方式工作。

    相比之下,在线用户访问的邮箱是在邮件服务器上,但是邮箱仍然由客户软件处理。邮件始终存储在服务器上。在线方式主要是由位置固定的用户使用,典型地是在快速LAN连接下进行。但是从远程拨进的功能较弱的计算机在这种模式下也可以工作得很好。有一些POP3服务器也提供了在线功能,但是,它们没有达到IMAP4的功能级别。

    断连方式提供了最大的灵活性。客户软件把用户选定的消息和附件复制或缓存到本地磁盘上,并把原始副本留存在邮件服务器上。缓存中的邮件可以被用户处理,以后用户重新连接邮件服务器时,这些邮件可以与服务器进行再同步。当前,该特性主要由邮件服务器实现,很少有客户软件支持断连方式。在我们评测的产品中,Sun的Internet Mail Client 是唯一提供这一功能的客户软件。

    对于IMAP4而言,无论是在哪一种操作系统上,使用IMAP4邮件客户软件的用户都可以读取和回复邮件,远程地把邮件存储在层次式的文件夹中,并且可通过IMAP4邮件主机同步客户文件。客户软件和服务器相互配合,允许过滤来自特定地址的邮件,还能够防止通过低速拨号链路下载大文件。用户可以查看主机上的邮件报文,如果需要,可以决定把其中哪些内容下载到远程连接的客户机上。用户还可以有选择地下载邮件,而不必非要下载邮件的附件。


    IMAP与POP3及Web Mail的比较
    金笛电子邮件系统是目前国内众多电子邮件系统中率先提供IMAP4服务的系统,完整支持最新版本的IMAP4rev1(RFC2060)协议。IMAP是Internet Message Access Protocol的缩写,顾名思义,主要提供的是通过Internet获取信息的一种协议。IMAP4是IMAP协议的第4个版本,正如POP3是POP协议的第3个版本一样。在AIMC邮件系统内,IMAP是一种强有力的邮箱访问方式。
    和POP3的区别
    由于很多用户都对POP3非常熟悉,我们就从POP3说起。POP3提供了快捷的邮件下载服务,用户可以利用POP3把邮箱里的信下载到PC上进行离线阅读。一旦邮件进入PC的本地硬盘,就可以选择把邮件从服务器上删除,然后脱离与Internet的连接并选择在任何时候阅读已经下载的邮件。
    IMAP同样提供了方便的邮件下载服务,让用户能进行离线阅读,但IMAP能完成的却远远不只这些。首先,IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。也就是说,你不必等所有的邮件都下载完毕后才知道究竟邮件里都有些什么。如果你根据摘要信息就可以决定某些邮件对你毫无用处,你就可以直接在服务器上把这些邮件删除掉,而不必浪费你宝贵的上网时间。如果你的IMAP客户端软件完整支持IMAP4rev1的话(如Netscape 4.5),则你还可以享受选择性下载附件的服务。举例来说,假如一封邮件里含有大大小小共5个附件,而其中只有2个附件是你需要的,你就可以只下载那两个附件,节省了下载其余3个的时间。
    和WebMail的比较
    也有很多用户喜欢通过Web来联机收发邮件,其中一个很重要的原因是这些用户希望把他的邮件都留在服务器上,并且通过WebMail服务建立多个文件夹,然后分类归档地管理自己的邮件。这样,WebMail的用户就可以不分时间地点,只要有一个浏览器就可以马上从服务器上获得自己的邮件,不管是刚收到的还是已经存放了很久,也不必担心客户端的PC重新安装了操作系统或换了一台电脑以后邮件全部丢失了的问题。
    IMAP同样满足了WebMail用户的需要。IMAP与POP3不同的地方关键是在支持离线阅读的同时也鼓励用户把邮件存储和组织在服务器上。和WebMail一样,通过IMAP,允许用户在服务器上建立任意层次结构的文件夹,并且可以灵活地在文件夹之间移动邮件,随心所欲地组织你的邮箱(这些显然是通过POP3做不到的)。只要你的邮件存储在服务器上,任何时候通过一个IMAP的客户端软件都可以立即联机获得你的邮件,这一点与WebMail保持一致。
    但是,IMAP的以下优点足以把WebMail用户吸引过来:凡是WebMail的用户都必需无奈地阅读页面上的广告,都必需花费宝贵的时间和带宽来下载页面上的图面,修饰字符等等;IMAP则忠实地只为你的Email服务,不让你的资源有丝毫的浪费。
    IMAP的其它好处
    IMAP协议还允许你方便地利用你的邮箱作为信息存储工具,一般的IMAP4客户软件都支持邮件在本地文件夹间和服务器文件夹间的随意拖动,让你得心应手地把本地硬盘上的文件存放到服务器上,然后在你需要的时候同样方便地取回来,所有的功能仅需要一次鼠标拖放的操作来实现,是不是很好?
    总的来说,POP3和WebMail的优点在IMAP里都有,而IMAP却能很好地克服POP3和WebMail各自的缺点。喜欢新鲜的你是不是也想试一试?


    IMAP4协议处理状态及工作流程
    任何时候,每个IMAP4服务处理线程都处于4种处理状态的其中一种。大部分的IMAP4命令都只会在某种处理状态下才有效。如果IMAP4客户端软件企图在不恰当的状态下发送命令,则服务器将返回协议错误的失败信息,如BAD或NO等等。
    非认证状态
    在这个状态下,客户软件必须发出认证请求命令。在IMAP4连接建立时,服务器处理线程自动进入这个状态。
    认证状态
    在认证状态下,客户软件必须选择一个邮箱。这个状态在认证请求命令得到确认答复后进入,或在预认证连接建立后直接进入。
    已选择状态
    这个状态表示IMAP4客户软件已经选择了某一Folder。在这个状态下可以发送所有检索邮件内容的命令。
    离线状态
    在这个状态,连接已经终止,服务器将关闭这个连接。客户端软件可以发出命令或由服务器强制进入这个状态。


    IMAP命令概要
    IMAP协议中的命令与POP3中最大的不同是每条命令前都一有一个由Client指定的标签,同一个会话中,Client发出的每条命令都会有不同的标签;而Server对每个Client发出的命令都必须以相同的标签作应答。这就使得IMAP会话中Client可以同时送出多个命令,而Server则完全可以并发处理这些命令,不必等待上一个命令执行完毕才处理下一个。
    下面是若干常用的IMAP命令
    <TAG> LOGIN <user name> <password>
    LOGIN命令用于登录IMAP服务器,与POP3显著不同的是用户名和口令同时作为参数提交给Server,而POP3完成同样的操作需要USER和PASS两条命令。
    C: a001 LOGIN SMITH SESAME
    S: a001 OK LOGIN completed
    <TAG> CREATE <folder>
    CREATE可以创建指定名字的文件夹。文件夹名字通常是带路径的文件夹全名。
    C: A003 CREATE owatagusiam/
    S: A003 OK CREATE completed
    C: A004 CREATE owatagusiam/blurdybloop
    S: A004 OK CREATE completed
    <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
    <TAG> 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
    <TAG> 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
    <TAG> 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
    <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
    <TAG> FETCH …
    FETCH命令是IMAP协议里最复杂的命令。FETCH的命令参数很多、很复杂,难以一一列举,但基本的特征是允许将邮件按照MIME结构拆解为零碎的部件来提取。例如,可以利用FETCH命令提取邮件头、某一个附件、或某一邮件附件头部的某一字段,等等。
    <TAG> 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
    <TAG> CLOSE
    CLOSE命令表示Client结束对当前Folder的访问,随后可以SELECT另一Folder。
    C: A341 CLOSE
    S: A341 OK CLOSE completed
    <TAG> EXPUNGE
    EXPUNGE将邮箱中所有打了删除标记的邮件彻底删除。EXPUNGE删除的邮件将不可以恢复。
    C: A202 EXPUNGE
    S: * 3 EXPUNGE
    S: * 3 EXPUNGE
    S: * 5 EXPUNGE
    S: * 8 EXPUNGE
    S: A202 OK EXPUNGE completed
    <TAG> 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 "imap" "cac.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
    ////////////////////////////////////////////////////////////////////////////////////////
  • 相关阅读:
    查看python关键字
    命令终端执行python
    Codeforces-462C. A Twisty Movement
    Codeforces-462A. A Compatible Pair
    Codeforces-446C. Pride
    Codeforces-Hello 2018C. Party Lemonade(贪心)
    Codeforces-33C. Wonderful Randomized Sum
    Codeforces-118D. Caesar's Legions(lazy dynamics)
    codeforces-73C. LionAge II
    Gym 101510C-Computer Science
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1047554.html
Copyright © 2011-2022 走看看