IMAP命令与分析

摘要:
IMAP,原名交互式邮件访问协议,是斯坦福大学于1986年开发的邮件访问协议。POP3协议和POP3协议的主要区别在于,用户可以通过客户端直接操作服务器邮件,而无需下载所有邮件。IMAP(Internet邮件访问协议)还提供面向用户的邮件收集服务。

https://www.cnblogs.com/crystalray/p/3304688.html

Internet Mail Access Protocol(缩写为IMAP,以前称作交互邮件访问协议(interactive mail access protocol))IMAP是斯坦福大学在1986年开发的研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

  具体协议内容可以查阅:http://www.faqs.org/rfcs/rfc3501.html 中文版:http://blog.csdn.net/qqnnhhbb/article/details/6428681

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

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

 

IMAP的状态图如下:

  IMAP命令与分析第1张

(1)未预认证的连接(OK欢迎)
(2)预认证的连接(PREAUTH欢迎)
(3)被拒绝的连接(BYE欢迎)
(4)成功LOGIN或者AUTHENTICATE命令
(5)成功的SELECT或者EXAMINE命令
(6)CLOSE命令,或者失败的SELECT、EXAMINE命令
(7)LOGOUT命令,服务器关闭,或者连接已关闭

 

这里使用telnet命令来对126邮箱进行操作参数分别是邮件服务器地址和端口(143)如果是SSL的话连993

IMAP命令与分析第2张

 

capability命令请求服务器支持的功能列表,从这返回可见126邮箱不支持AUTHENTICATE功能的。

IMAP命令与分析第3张

noop命令什么也不做,用来向服务器发送自动命令,防止因长时间处于不活动状态而导致连接中断

IMAP命令与分析第4张

使用STARTTLS命令可以加密传输邮件内容,因为我使用的是telnet不支持加密传输,所以使用明文登录。

不过在IMAP协议中要求“

一个服务器实现体必须实现一个配置,认证时,要求:
(1)STARTTLS命令已经通过。
或者
(2)其它保护会话防密码窃听的机制已经提供。
或者
(3)以下措施已采用:
(a)LOGINDISABLED功能被通报,且使用简单文本密码的[SASL]机制(如,PLAIN)没在功能列表中通报。
(b)AUTHENTICATE命令返回一个错误,即使密码是正确的。
(c)AUTHENTICATE命令返回使用简单文本密码的所有[SASL]机制的一个错误,即使密码是正确的。
针对一个失败的LOGIN命令的一个服务器错误邮件不应当指明该用户名,对于该密码,是无效的。

登录成功后状态变为authenticated。

IMAP命令与分析第5张

select 命令选择一个邮箱,如果成功则状态变为selected。此时是可对邮箱进行读写操作的。

IMAP命令与分析第6张

examine命令和select命令效果一样,返回的内容也类似,区别在于examine是只读的。

IMAP命令与分析第7张

create命令创建文件夹

IMAP命令与分析第8张

rename命令能够重命名

IMAP命令与分析第9张

delete 删除指定文件夹和其所有邮件

IMAP命令与分析第10张

subscribe 指定邮箱为活动的

IMAP命令与分析第11张

可以通过lsub查看活动邮箱

IMAP命令与分析第12张

unsubscribe取消订阅活动邮箱

IMAP命令与分析第13张

list命令列出符合条件的邮箱,第一个参数是基址,第二个是邮箱名,可使用通配符。

IMAP命令与分析第14张

status显示指定邮箱的指定信息,该命令不会改变当前邮箱的选中状态。

IMAP命令与分析第15张

append命令添加一个新邮件到指定文件夹中

IMAP命令与分析第16张

check命令用来在邮箱设置一个检查点。没有参数。就是IMAP中的sync命令。任何未完成的操作,例如从服务器内存向硬盘写数据,都将会被做完以保持邮箱的一致性状态。该命令确保乃村中的磁盘缓冲数据都被写到了磁盘上。

IMAP命令与分析第17张

close命令取消当前选中状态,变回authenticated

IMAP命令与分析第18张

expunge命令删除所有flags中有deleted标记的邮件

IMAP命令与分析第19张

search命令可以根据搜索条件在活动状态的邮箱中搜索邮件,并返回邮件号。搜索的关键字有如下几种:

ALL
邮件中所有邮件;ANDing的默认初始关键词。
ANSWERED
带有/Answered标记位的邮件。
BCC <string>
在信封结构的BCC域包含有指定字符串的邮件。
BEFORE <date>
实际日期(忽视时间和时区)早于指定日期的邮件。
BODY <string>
在邮件的主体域包含有指定字符串的邮件。
CC <string>
在信封结构的CC域包含有指定字符串的邮件。
DELETED
带有/Deleted标记位的邮件。
DRAFT
带有/Draft标记位的邮件。
FLAGGED
带有/Flagged标记位的邮件。
FROM <string>
在信封结构的FROM域包含有指定字符串的邮件。
HEADER <field-name> <string>
带有一个含指定field-name([RFC-2822]中定义)的头部、且在该头部(它跟在colon之后)的文本中包含指定字符串的邮 件。如果将要检索的字符串(参数中的string)长度为零,那么,它将匹配带有一个含指定field-name、内容可有可无的头部行的所有邮件。
KEYWORD <flag>
带有指定关键词标记位的邮件。
LARGER <n>
带有一个[RFC-2822](定义)的、大于指定字节数的大小的邮件。
NEW
带有/Recent标记位,但不带有/Seen标记的邮件。它在功能上等效于“(RECENT UNSEEN)”。
NOT <search-key>
不符合指定检索关键词的邮件。
OLD
不带有/Recent标记位的邮件。它在功能上等效于“NOT RECENT”(与“NOT NEW”相反)。
ON <date>
实际日期(忽视时间和时区)在指定日期的邮件。
OR <search-key1> <search-key2>
符合任意一个检索关键词的邮件。
RECENT
带有/Recent标记位的邮件。
SEEN
带有/Seen标记位的邮件。
SENTBEFORE <date>
[RFC-2822]Date: header(忽视时间和时区)早于指定日期的邮件。
SENTON <date>
[RFC-2822]Date: header (忽视时间和时区)在指定日期的邮件。
SENTSINCE <date>
[RFC-2822]Date: header (忽视时间和时区)在指定日期或者晚于指定日期的邮件。
SINCE <date>
实际日期(忽视时间和时区)在指定日期或者晚于指定日期的邮件。
SMALLER <n>
带有一个[RFC-2822]的、小于指定字节数大小的邮件。
SUBJECT <string>
在信封结构的SUBJECT域含有指定字符串的邮件。
TEXT <string>
在邮件的头部或者主体含有指定字符串的邮件。
TO <string>
在信封结构的TO域含有指定字符串的邮件。
UID <sequence set>
带有指定唯一标识符集相应的唯一标识符的邮件。序列集顺序排列是允许的。
UNANSWERED
不带有/Answered标记位的邮件。
UNDELETED
不带有/Deleted标记位的邮件。
UNDRAFT
不带有/Draft标记位的邮件。
UNFLAGGED
不带有/Flagged标记位的邮件。
UNKEYWORD <flag>
不带有指定关键词标记位的邮件。
UNSEEN
不带有/Seen标记位的邮件。
 
搜索从2013年1月1日到2013年5月1日的邮件

IMAP命令与分析第20张

搜索标题或者正文中包含test字符串的邮件

IMAP命令与分析第21张

 

FETCH 命令用于读取邮件的文本信息,且仅用于显示的目的。包含两个参数,messageset:表示希望读取的邮件号列表,IAMP服务器邮箱中的每个邮件都有 一个唯一的ID标识,(邮件号列表参数可以是一个邮件号,也可以是由逗号分隔的多个邮件号,或者由冒号间隔的一个范围),IMAP服务器返回邮件号列表中 全部邮件的指定数据项内容。
数据名参数确定能够被独立返回的邮件的一部分,下面我们看看各参数返回的邮件信息:
ALL:只返回按照一定格式的邮件摘要,包括邮件标志、RFC822.SIZE、自身的时间和信封信息。IMAP客户机能够将标准邮件解析成这些信息并显示出来。
BODY:只返回邮件体文本格式和大小的摘要信息。IMAP客户机可以识别这些细腻,并向用户显示详细的关于邮件的信息。其实是一些非扩展的BODYSTRUCTURE的信息。
FAST:只返回邮件的一些摘要,包括邮件标志、RFC822.SIZE、和自身的时间。
FULL:同样的还是一些摘要信息,包括邮件标志、RFC822.SIZE、自身的时间和BODYSTRUCTURE的信息。
BODYSTRUCTUR: 是邮件的[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等区段。这样的嵌套是没有限制的。

 

抓取431号邮件的摘要

IMAP命令与分析第22张

抓取430到433号邮件的日期和主题

IMAP命令与分析第23张

抓取433号邮件的附件的前128字节

IMAP命令与分析第24张

 

store命令用于修改指定邮件的属性,包括给邮件打上已读标记、删除标记,等等。

IMAP命令与分析第25张

copy命令将制定邮件拷贝到指定邮箱中

IMAP命令与分析第26张

uid命令可以将邮件号为条件的命令转为唯一标示符来表示

IMAP命令与分析第27张

logout命令退出系统

IMAP命令与分析第28张

免责声明:文章转载自《IMAP命令与分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DB2命令——客户端命令连接服务器iOS如何隐藏iPhoneX底部安全区那根横线下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Redis发布与订阅

Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式。  举个例子: 当右边窗口执行了后, 一、频道的订阅与信息发送 Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有...

CentOS7 编译安装golang和rpm安装golang

编译安装 1、下载golang二进制安装包: https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz 2、解压安装包到指定目录,此处以解压到/usr/local目录下为例: 1 tar -C /usr/local -xzf ../packages/go1.8.linux-amd64.ta...

SSL/TLS协议运行机制的概述

日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 (1) 窃听风险(eavesdr...

利用 ssh 的用户配置文件 config 管理 ssh 会话

http://dhq.me/use-ssh-config-manage-ssh-session 利用 ssh 连接远程服务器,一般都要输入以下类似命令: 1 ssh user@hostname -p port 如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,不用 PuTTY、SecureCRT之类的 ssh 客户...

Arthas进阶学习(常用命令)

Step1 下载demo-arthas-spring-boot.jar,再用java -jar命令启动: wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar java -jar demo-arthas-spring-boo...

一、Haproxy基础介绍

一、负载均衡介绍1、什么是SLB SLB(Server Load Balance)服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台服务器资源虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,将来自客户端的网络请求分发到服务器池中。 SLB服务会检查服务器池中所有服务器的健康状态,自动隔离异常状态的服务器,从而解决了单台服务...