第1章. POP3概述

POP3全称为Post Office Protocol version3,即邮局协议第3版。它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通信 模型,对应的RFC文 档为RFC1939。 该协议非常简单,所以我们只重点介绍其通信过程,而相关的一些概念和术语请参考RFC文档或另外一篇文章《SMTP协议分析》

第2章. POP3详解

2.1. 通信过程

用户从邮件服务器上接收邮件的典型通信过程如下。

1) 用户运行用户代理(如Foxmail, Outlook Express)。

2) 用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)的110端口建立TCP连 接。

3) 客户端向服务器端发出各种命令,来请求各种服务(如查询邮箱信息,下载某封邮件等)。

4) 服务端解析用户的命令,做出相应动作并返回给客户端一个响应。

5) 3)和4)交替进行,直到接收完所有邮件转到步骤6),或两者的连接被意外中断而直接退出。

6) 用户代理解析从服务器端获得的邮件,以适当地形式(如可读)的形式呈现给用户。

其中2)、3)和4)用POP3协议通信。通信过程,可以用图1表示。可以看出命令和响应是POP3通信的重点,我们将予以重点讲述。

图1.POP3通信过程

2.2. 命令和响应

2.2.1. 格式

POP3的命令不多,它的一般形式是:COMMAND [Parameter] <CRLF>。

COMMAND:ASCII形式的命令名

Parameter:相应的命令参数
<CRLF>:回车换行符(0DH, 0AH)(C语言中为\r\n)

服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行“+OK”或“-ERR”开头,然后再加上一些ASCII文本。

+OK:操作成功

-ERR:操作失败

2.2.2. 三个状态

POP3协议中有三种状态,认正状态,处理状态,和更新状态。命令的执行可以改变协议的状态,而对于具体的某命令,它只能在具体的某状态下使用,这些请参看表1和RFC193。

客户机与服务器刚与服务器建立连接时,它的状态为认证状态;一旦客户机提供了自己身份并被成功地确认,即由认可状态转入处理状态; 在完成相应的操作后客户机发出QUIT命令(具体说明见后续内容),则进入更新状态,更新之后又重返认可状态;当然在认可状态下执行QUIT命令,可释放连接。

---建立连接---|认可|--认证成 功--|处理|--执行QUIT--|更新|
|_______ -QUIT结束_________________|

2.2.3. 一个例子

命令和响应的格式是语法,各命令和响应的意思则是语义,各命令和各响应在时间上的关系则是同步。我们还是通过以个简单的POP3通信过程来说明协议的这三个 要素。

C:telnet pop3.126.com 110 /* 以telnet方式连接126邮件服务器 */

S:+OK Welcome to coremail Mail Pop3 Server (126coms[3adb99eb4207ae5256632eecb8f8b4855]) /* +OK,代表命令成功,其后的信息则随服务器的不同而不同*/

C:USER bripengandre /*采用明文认证*/

S:+OK core mail

C:PASS Pop3world /*发送邮箱密码*/

S:+OK 654 message(s) [30930370 byte(s)] /*认证成功,转入处理状态*/

C:LIST 1 /*显示第一封邮件的信息*/

S:+OK 1 5184 ./*第一封邮件 的大小为5184字节 */

C:UIDL 1 /*返回第一封邮件的唯一标识符*/

S:+OK 1 1tbisBsHaEX9byI9EQAAsd /*数字1后的长字符串就是第一封邮件的唯一标志符*/

C:RETR 1 /*下载第一封邮件*/

S:+OK 5184 octets /*第一封邮件的大小为5184字节 */

S:Receive… /*第一封邮件的具体内容 */

S:…

C:QUIT /*转入更新状态,接着再转入认证状态*/

S:+OK

C: QUIT /*退出连接*/

S:+OK core mail /*成功地退出了连接*/

对于上述的过程,补充如下几点内容。

1) “C:”开头的行(不包括"C:")是客户端的输入,而以“S:”开头的行(不包括"S:")则是服务器的输出。

2) 上述的命令并不一定会一次性成功,服务器会返回错误响应(以“-ERR”开头),客户端应该按照协 议规定的时序,来输入后续的命令(或重复执行失败的命令,或重置会话,或退出会话等等)。

3) 上述过程是示意性的,实际过程可能与其有较大不同。例如,实际过程中可能使用加密认证(MD5摘要认证)。

4) RETR下载下来的邮件可能会难以看懂,这是因为其可能使用了quoted-printable编码或base64编码,我们可用Foxmail等用户代理软件来解码它。

2.2.4. 常用命令和响应

SMTP命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFC1939。常用的命令如表 1所示。

命 令

参 数

使 用在何种状态中

描 述

USER

Username

认证

此命令与下面的pass命令若成功,将导致状态转 换

PASS

Password

认证

此命令若成功,状态转化为更新

APOP

Name,Digest

认证

Digest是MD5消息摘要

STAT

None

处理

请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

UIDL

[Msg#](邮件号,下同)

处理

返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

LIST

[Msg#]

处理

返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

RETR

[Msg#]

处理

返回由参数标识的邮件的全部文本

DELE

[Msg#]

处理

服务器将由参数标识的邮件标记为删除,由QUIT命 令执行

TOP

[Msg#]

处理

服务器将返回由参数标识的邮件的邮件头+前n行内容,n必须是正整数

NOOP

None

处理

服务器返回一个肯定的响应,用于测试连接是否成功

QUIT

None

处理、认证

1) 如果服务器处于“处理”状态,么将进入“更新”状态以删除任何标记为 删除的邮件,并重返“认证”状态。

2) 如果服务器处于“认证”状态,则结束会话,退出连接

表 1 POP3的常用命令

至于响应则如2.2.1所述,由“+OK”或“-ERR”开头,后跟一些可读的说明和一些其它参数(对RETR,这个参数就是邮件的内容)。更详细的说明请参考RFC1939。

转载于:https://www.cnblogs.com/foxmin/archive/2011/10/16/2214425.html

邮件服务器之POP3协议分析相关推荐

  1. 邮件服务器之SMTP协议分析

    第1章. SMTP概述 1.1. SMTP在邮件通信过程中的位置 SMTP,即简单邮件传送协议,所对应RFC文档为RFC821.同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的 ...

  2. Linux下架构安全邮件服务器之Sendmail

    简介 一  .E-mail  概述 Internet最基本的服务,也是最重要的服务之一,就是电子邮件 服务.据统计Internet上百分之三十以上的业务量是电子邮件,仅 次于WWW服务.与传统的邮政信 ...

  3. Linux下巧妙使用邮件服务器之postfix(认证+web)

    简介 一. postfix邮件服务的安装 Red Hat Enterprise Linux 提供了sendmail和postfix两种STMP邮件服务软 件,让用户可以随意地选择其中一种!不过,默认情 ...

  4. java pop3 接收邮件_JavaMail使用POP3协议接收并解析电子邮件

    JavaMail使用POP3协议接收并解析电子邮件 代码片段:public static void main(String[] args) throws Exception { receive(); ...

  5. notes服务器日志文件,邮件服务器之日志分析(五)

    ### 邮件服务器(mail.unotes.co)收到 test01\@unotes.co 发送给 test.redhat\@gmail.com 邮件的日志 ```bash $ tail -f /va ...

  6. 邮件服务器之Webmail

    此服务在centos6.5上构建 确保DNS服务已经为邮件应用配置完成 确保开发库和开发工具都已安装,centos6与RH5开发库命名有所不同 Server Platform Development ...

  7. 邮件服务器之微软Exchange server (转)

    [导读]Exchange server是与windows服务器和活动目录紧密结合的邮件和企业协作服务器 无可否认,电子邮件已经成为全球通信事实上的标准.在许多企业中,电子邮件已经成为标准的和正式的通信 ...

  8. cefsharp 发送请求服务器_WEB服务器之HTTP协议

    本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手.四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程. 一.web浏览器 通常在我们上网时会在 ...

  9. iredmail邮件服务器之修改默认的web服务端口号

    安装iredmail之后,由于需要在路由器上做端口映射以便在外网访问webmail,因此端口不能和WEB服务的端口好冲突,所以需要修改邮件服务器的httpd服务的端口. 一.apache/httpd的 ...

最新文章

  1. c++ 打印 torch tensor
  2. 如何快速学习产品?实践才是王道!同为小白的人儿加油!
  3. 这些道理不懂,你注定就是穷打工的命!(转载)
  4. Spring应用架构
  5. 休眠事实:了解刷新操作顺序很重要
  6. 作者:谢华美(1976-),男,中国人民银行征信中心数据部副总经理
  7. 酷客多小程序受邀参加 中国县域连锁药店发展峰会
  8. Gradle下载类库源码
  9. jackson改变json值_使用jackson处理json数据
  10. jcr多久更新一次_2020年期刊影响因子正式发布,几家欢喜几家愁?!
  11. excel嵌入动态二维码 含中文
  12. 关于写好一篇英文学术论文(及搞好本领域学术研究)的一些想法
  13. 2018年——不平凡的一年
  14. linux 查看vcf文件,VCF格式文件的shell小练习
  15. 转载 编程新手入门
  16. Python文字转换语音,让你的文字会「说话」,抠脚大汉秒变撒娇萌妹
  17. kb3020369不适用计算机,适用于Windows 7的Service Pack 2 Microsoft发布KB3020369便利汇总更新 | MOS86...
  18. 2016,初入江湖,尚未见刀光剑影
  19. 【Python金融量化】零基础如何开始学?
  20. 计算各位数字的平方和

热门文章

  1. Centos7-Lvs+Keepalived架构实验详解
  2. 编写数学公式的好工具
  3. Idea的一些调试技巧及设置todo
  4. 基于环信sdk的陌生人交友php服务器代码开源
  5. TortoiseSVN检出链接(可用于与站点集成)
  6. [Android Studio] Android Studio如何提示函数用法
  7. C眼看J - 初窥JAVA
  8. SQL Server中的STUFF函数的使用
  9. [转载]VirtualBox网络配置详解
  10. ASP无组件上传带进度条