概述
IMAP4(Internet Message Access Protocol 4) 即 交互式数据消息访问协议第四个版本
    IMAP协议是由斯坦福大学的Mark Crispin教授在1986年开发的,后期版本是华盛顿州立大学进行开发的,IMAP4是TCP/IP协议族中的一员,现在的版本是“IMAP第四版第一次修订版”(IMAP4rev1)
      IMAP4协议与POP3协议一样也是规定个人计算机如何访问互联网上的邮件服务器进行收发邮件的协议,但是IMAP4协议同POP3协议相比更高级。 IMAP4协议支持客户机在线或者离线访问并阅读服务器上的邮件,还能交互式的操作服务器上的邮件。IMAP4协议更人性化的地方是不需要像POP3协议 那样把邮件下载到本地,用户可以通过客户端直接对服务器上的邮件进行操作(这里的操作是指:在线阅读邮件 在线查看邮件主题 大小 发件地址等信息)。用户还可以在服务器上维护自己邮件目录(维护是指移动 新建 删除 重命名 共享 抓取文本 等操作)。IMAP4协议弥补了POP3协议的很多缺陷,,由RFC3501定义。本协议是用于客户机远程访问服务器上电子邮件,它是邮件传输协议新的标 准。

IMAP4协议的特性
   IMAP4协议的默认端口:143
   IMAP4协议默认传输协议:TCP/IP
   IMAP4协议适用的网络构架:C/S
   IMAP4协议访问模式:离线/在线
   IMAP4协议存储邮件模式:分布式

IMAP协议的特点  
   与POP3协议类似,IMAP(Internet消息访问协议)也是提供面向用户的邮件收取服务。常用的版本是IMAP4。IMAP4改进了POP3的不 足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱,它除了支持POP3协议的脱机操作模式 外,还支持联机操作和断连接操作。它为用户提供了有选择的从邮件服务器接收邮件的功能、基于服务器的信息处理功能和共享信箱功能。IMAP4的脱机模式不 同于POP3,它不会自动删除在邮件服务器上已取出的邮件,其联机模式和断连接模式也是将邮件服务器作为“远程文件服务器”进行访问,更加灵活方便。

IMAP4支持的功能
   1 支持连接和断开两种操作模式。当使用POP3时,客户端只会连接在服务器上一段的时间,直到它下载完所有新信息,客户端即断开连接。在IMAP中,只要用 户界面是活动的和下载信息内容是需要的,客户端就会一直连接在服务器上。对于有很多或者很大邮件的用户来说,使用IMAP4模式可以获得更快的响应时间。
   2. 支持多个客户同时连接到一个邮箱。POP3协议假定邮箱当前的连接是唯一的连接。相反,IMAP4协议允许多个用户同时访问邮箱同时提供一种机制让客户能够感知其他当前连接到这个邮箱的用户所做的操作。
3. 支持访问消息中的MIME部分和部分获取。几乎所有的Internet 邮件都是以MIME格式传输的。MIME允许消息包含一个树型结构,这个树型结构的叶子节点都是单一内容类型而非叶子节点都是多块类型的组合。IMAP4 协议允许客户端获取任何独立的MIME部分和获取信息的一部分或者全部。这些机制使得用户无需下载附件就可以浏览消息内容或者在获取内容的同时浏览。
   4. 支持在服务器保留消息状态信息。通过使用在IMAP4协议中定义的标志客户端可以跟踪消息状态,例如邮件是否被读取,回复,或者删除。这些标识存储在服务器,所以多个客户在不同时间访问一个邮箱可以感知其他用户所做的操作。
   5. 支持在服务器上访问多个邮箱。IMAP4客户端可以在服务器上创建,重命名,或删除邮箱(通常以文件夹形式显现给用户)。支持多个邮箱还允许服务器提供对于共享和公共文件夹的访问。
6. 支持服务器端搜索。IMAP4提供了一种机制给客户使客户可以要求服务器搜索符合多个标准的信息。在这种机制下客户端就无需下载邮箱中所有信息来完成这些搜索。
7. 支持一个定义良好的扩展机制。吸取早期Internet协议的经验,IMAP的扩展定义了一个明确的机制。很多对于原始协议的扩展已被提议并广泛使用。无 论使用POP3还是IMAP4来获取消息,客户端使用SMTP协议来发送。邮件客户可能是POP客户端或者IMAP客户端,但都会使用SMTP

IMAP4协议的工作原理
   1.IMAP4协议适用于C/S构架中,IMAP4协议对于提供邮件访问服务且使用广泛的POP3协议的另一种选择,基本上两者都是规定个人计算机如何连 接到互联网上的邮件服务器进行收发邮件。IMAP4协议支持对服务器上的邮件进行扩展性操作,IMAP4也支持ASCII码明文传输密码。
   2.与POP3不同的是,IMAP4能支持离线和在线两种模式来传输数据,①在离线方式中,客户端程序会不间断的连接服务器下载未阅读过的邮件到本地磁盘,当客户端需要接受或者发送邮件时才会于服务器建立连接,这就是离线访问模式。POP3典型地以离线方式工作。②在 线模式中,一直都是由客户端程序来操作服务器上的邮件,不需要像离线模式那样把邮件下载到本地才能阅读,(即使用户把邮件下载到本地,服务器上也会存一份 副本,而不会像POP协议那样把邮件删除)。用户可以通过客户端程序或者Wed在线浏览邮件(IMAP4提供的浏览功能可以让你在阅读完所有的邮件到达时 间、主题、发件人、大小等信息,同时还可以享受选择性下载附件的服务)。一些POP3服务器也提供了在线功能,但是,它们没有达到IMAP4的浏览功能的 级别。
   3.IMAP4是分布式存储邮件方式,本地磁盘上的邮件状态和服务器上的邮件状态,可能和以后再连接时不一样。此时,IMAP4的分布式存储机制解决了这 个问题。IMAP4邮件的客户端软件能够记录用户在本地的操作,当他们连上网络后会把这些操作传送给服务器。当用户离线的时候服务器端发生的事件,服务器 也会告诉客户端软件,比如有新邮件到达等,以保持服务器和客户端的同步。
   4.IMAP4协议处理线程都处于4种处理状态的其中一种。大部分的IMAP4命令都只会在某种处理状态下才有效。如果IMAP4客户端软件企图在不恰当的状态下发送命令,则服务器将返回协议错误的失败信息,如BAD或NO等等。

非认证状态
在这个状态下,客户软件必须发出认证请求命令。在IMAP4连接建立时,服务器处理线程自动进入这个状态。

认证状态
在认证状态下,客户软件必须选择一个邮箱。这个状态在认证请求命令得到确认答复后进入,或在预认证连接建立后直接进入。
已选择状态
这个状态表示IMAP4客户软件已经选择了某一Folder。在这个状态下可以发送所有检索邮件内容的命令。

离线状态
在这个状态,连接已经终止,服务器将关闭这个连接。客户端软件可以发出命令或由服务器强制进入这个状态。
不像大多数旧的Internet协议,IMAP4生来支持加密注册机制。IMAP4中也支持明文传输密码。因为加密机制的使用需要客户端和服务器双方的一 致,明文密码的使用是在在一些客户端和服务器类型不同的情况下(例如Microsoft Windows客户端和非Windows服务器)。使用SSL也可以对IMAP4的通信进行加密,通过将在SSL上的IMAP4通信通过993端口传输或 者在IMAP4线程建立的时候声明“”“STARTTLS”。

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

IMAP4协议介绍nbsp;工作原理相关推荐

  1. RabbitMQ介绍及工作原理

    RabbitMQ介绍及工作原理 一,什么是RabbitMQ ​ RabbitMQ是一种称为消息代理或队列管理器的消息队列软件.它是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到它们.消息 ...

  2. 三极管的介绍及工作原理

    转载自[http://www.elecfans.com/yuanqijian/sanjiguang/20170425510870.html] 三极管的介绍及工作原理 三极管介绍 三极管的工作原理 一. ...

  3. ETL介绍及工作原理

    ETL介绍及工作原理 ETL简介 ETL如何工作? 数据集的定义 ETL简介 ETL即EXTRACT(提取).Transform(转换).LOAD(加载): 提取是从数据库读取数据的过程.在此阶段,通 ...

  4. Heartbeat的介绍及工作原理

    一.HeartBeat的概述 Heartbeat 项目是 Linux-HA 工程的一个组成部分,自1999年开始到现在,发布了众多版本,是目前开源Linux-HA项目最成功的一个例子,它实现了一个高可 ...

  5. Fidder介绍、工作原理

    https://www.cnblogs.com/R-bear/p/7508133.html 一:Fidder介绍 Fidder是web端比较易用的调试工具:它能够记录所有客户端.服务端的http.ht ...

  6. [C++] - dynamic_cast介绍及工作原理、typeid、type_info

    Table of Contents 1.dynamic_cast工作原理 2.dynamic_cast介绍 3.static_cast与dynamic_cast 4.typeid 1.dynamic_ ...

  7. Docker Weave 介绍 or 工作原理

    Docker Weave Network Weave Network:属于第三方网络项目. Weave在Docker主机之间实现Overlay网络,使用业界标准VXLAN封装,基于UDP传输,也可以加 ...

  8. Vlan与VTP的介绍及工作原理

    VLAN 一个VLAN =一个广播域 = 逻辑网段 (子网) 每个逻辑的VLAN就象一个独立的物理桥 交换机上的每一个端口都可以分配给不同的VLAN 默认的情况下,所有的端口都属于VLAN1(Cisc ...

  9. 什么是BGP协议,以及其工作原理

    BGP是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议. 一.动态路由的分类 (1)自治系统 IGP:内部网关路由协议,运行在AS内部的路由 ...

  10. CPU构成详细介绍以及工作原理

    中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要是解释计算机指令以 ...

最新文章

  1. 树莓派安装octave,报错missing `server' JVM at问题解决
  2. 加速100倍,性能媲美SOTA,浙大知识蒸馏新方法FastDFKD
  3. 常纪文:智慧城市有助于实现低碳绿色发展
  4. [考试]20151013搜索
  5. FFmpeg滤镜使用指南
  6. MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?
  7. 军营中重重打击之后,我变了一个人(上)--我成为程序员所经历的(四)
  8. 写一个工具生成数据库实体类
  9. java统计词频算法_java实现的统计字符算法示例
  10. 媒体智能-淘宝直播流媒体互动实践 | D2 分享视频+文章
  11. linux常用命令.txt
  12. vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
  13. C#水晶报表,窗体不显示,闪退
  14. 宝宝树发行价为6.8港元 11月27日在港交所正式挂牌
  15. BZOJ1354: [Baltic2005]Bus Trip
  16. java 原子long_java中long和double类型操作的非原子性探究
  17. [BZOJ1999][codevs1167][Noip2007]Core树网的核
  18. STM32RTC唤醒功能配置(基于LL库)
  19. JAVA程序员就业面试题大全
  20. python学什么内容_老男孩Python都需要学什么内容?老男孩教育

热门文章

  1. Ubuntu 视频 转 GIF
  2. Ubuntu HDMI连接后没有声音解决办法
  3. 【学习感悟】找工作之前的焦虑
  4. python视频补帧_视频补帧软件(DAIN APP)软件下载_视频补帧软件(DAIN APP)v0.40官方版 - Windows10系统之家...
  5. Spatial Transformer Networks(STN)理解
  6. 前端人不可错过的低代码神器,告别切图,一键成稿啦!
  7. 由内而外全面造就自己
  8. Window笔记本触摸板手势大全
  9. 我的2019全年目标
  10. 计算机平面设计专业可以考什么证,平面设计师资格证怎么考_计算机平面设计职称...