您的位置:首页 > 运维架构

POP3邮局协议详解

2010-05-21 15:23 351 查看
POP3

邮局协议

-

版本

3


 


 




 






 


1.
   

简介


...

2

2.
   

简单说明


...

2

3.
   

基本操作


...

2

4.
   


确认






...

3

USER <name>

.

3

PASS <string>

.

4

5.

      




作”


状态


...

4

STAT 

(无)


...

4

LIST [msg]


5

RETR <msg>

.

5

DELE <msg>

.

5

NOOP

(无)


...

6

RSET

(无)


...

6

6.

      




新”


状态


...

6

QUIT 

(无)


...

7

7.

      


选的POP3


命令


...

7

TOP <msg n>

.

7

UIDL [msg]


7

APOP <name> <digest>

.

8

8.

      

POP3


令总结


...

9

9.

      

POP3


话实例


...

10

10.

    


息格式


...

11

11.

    


全性考虑


...

11

附:


...

11

 


 


 


1.
   









对于在网络上的比较小的结点,支持消
息传输系统(MTS
)是不实际的。例如,一台工作站可能不具有充足的资源允许SMTP
服务器和相当的本地邮件传送系统保持序驻留,并持续运行。同样的,将一台个人计算机长时间连接在IP
类型网络上的费用也是可观的(结点缺少的资源被称为“

络性”
)。

虽然如此,在这样的小结点上允许管理
邮件是十分有用的,并且这些结点经常支持一个用户代理来管理邮件。为解决这一问题,能够支持MTS

结点就为这些不能支持的结点提供了邮件存储功能。邮局协议-
版本3
就是使这样的工作站可以用一种比较实用的方法来访问存储于服务器上的储存邮件。通常,这意味着工作站可以从服
务器上取得邮件,而服务器为它暂时保存邮件。 

在下文中,客户主机指的是利用POP3
服务的主机,而服务器主机指的是提供POP3

务的主机。

2.
   



单说明





在此文档中不指明客户主机如何将邮件
送入到传送系统中去。但这里有一个说明:当用户代理需要将信息送到传送系统时,它在接力主机上建立SMTP

接(这些接力主机可以是POP3
主机,也可以不是)。

3.
   



本操作





初始时,服务器通过侦听TCP
端口110
开始POP3
服务。当客户主机需要使用服务时,它将与服务器主机建立TCP

接。当连接建立后,POP3
发送确认消息。客户和POP3

务器相互(分别)交换命令和响应,这一过程一直要持续到连接终止。

POP3
命令由一个命令和一些参数组成。所有命令以一个CRLF
对结束。命令和参数由可打印的ASCII
字符组
成,它们之间由空格间隔。命令一般是三到四个字母,每个参数却可达40
个字符长。

POP3
响应由一个状态码和一个可能跟有附加信息的命令组成。所有响应也是由CRLF
对结束。现在有两种状态码,“
确定” ("+OK")
和“
失败” ("-ERR")


对于特定命令的响应是由许多字符组成
的。在这些情况中,下面一一表述:在发送第一行响应和一个CRLF
之后,任何的附加信息行发送,他
们也由CRLF
对结束。当所有信息发送结束时,发送最后一行,包括一个结束字符(十进制码46
,也就是“.”
)和一个CRLF
对。如果信息中的任何一行以结束字符开始,此行就是通过在那一行预先装入结束而进行字符填充的。因此,
多行响应由五个CRLF.CRLF 
结束。当检测多行响应时,客户检测以确认此行是否以结束字符开
始。如果是的,而且其后的字符不是CRLF
,此行的第一个字符(结束字符)将被抛弃;如果其后紧跟CRLF
,从POP
服务器来的响应终止,包括.CRLF 
的行也不被认为是多行响应的一部分了。

在生命周期中,POP3
会话有几个不同的状态。一旦TCP
连接被打开,
而且POP3
服务器发送了确认信息,此过程就进入了“

认”
状态。在此状态中,客户必须向POP3

务器确认自己是其的客户。一旦确认成功,服务器就获取与客户邮件相关的资源,此时这一过程进入了“

作”
状态。在此状态中,客户提出服务,当客户发出QUIT

令时,此过程进入了“
更新”
状态。在此状态
中,POP3
服务器释放在“
操作”
状态中取得的资源,并发送消息,终止连接。

POP3
服务器可以拥有一个自动退出登录的记时器。此记时器必须至少可以记录10
分钟。这样从客户发送的消息才可能刷新此记时器。当记时器失效时,POP3

话并不进入“
更新”
状态,而是关闭TCP
连接,而且不删除任何消息,不向客户发送任何响应。

4.
   






确认”
状态




一时TCP
连接由POP3
客户打开,POP3
服务器发送一个单行的确认。这个消息可以是由CRLF

束的任何字符。例如,它可以是: 

S: +OK POP3 server ready

注意:这个消息是一个POP3
应答。POP3
服务器应该给出一个“
确定”
响应作为确认。

此时POP3
会话就进入了“
确认”
状态。此时,客户必须向服务器证明它的身份。在文档中介绍两种可能的处理机制,一种是USER
和PASS
命令,另一种是在后面要介绍的APOP
命令。

用USER
和PASS
命令进行确认过程,客户必须首先发送USER
命令,如果POP3
服务器以“
确认”
状态码响应,客户就可以发送PASS
命令以完成确认,或者发送QUIT
命令终止POP3
会话。如果POP3
服务器返回“
失败”
状态码,客户可以再发送确认命令,或者发送QUIT
命令。

当客户发送了PASS
命令后,服务器根据USER
和PASS
命令的附加信息决定是否允许访问相应的存储邮件。

一旦服务器通过这些数据决定允许客户
访问储存邮件,服务器会在邮件上加上排它锁,以防止在进入“
更新”
状态前对邮件的改变。如果成功获得了排它锁,服务器返回一个“

认”
状态码。会话进入“
操作状态”
,同时没有任何邮件被标记为删除。如果邮件因为某种原因不能打开(例如,排它锁不能获得,客户不能访问相应
的邮件或者邮件不能进行语法分析),服务器将返回“
失败”

态码。在返回“
失败”
状态码后,服务器会关
闭连接。如果服务器没有关闭连接,客户可以重新发送确认命令,重新开始,或者发送QUIT
命令。

在服务器打开邮件后,它为每个消息指定
一个消息号,并以八进制表示每个消息的长度。第一个消息被指定为1
,第二个消息被指定为2
,以此类推,第N
个消息被指定为N
。在POP3
命令和响应中,所以的消息号和长度以十进
制表示。

下面是对上述三条命令的总结:

USER <name>




USER 

指定邮箱的字符串,这对服务器至关重要
 
仅在
USER

PASS
命令失败后或在

确认

状态中使用。

u       

返回:



+OK
:有效邮箱;

-ERR
:无效邮箱。

u       

例程:



C: USER mrose

S: +OK mrose is a real hoopy frood

...

C: USER frated

S: -ERR sorry, no mailbox for frated here

 

 

PASS <string>




PASS 

 
指定邮箱口令,仅在

确认

状态中
USER

令成功后使用(因为此命令只有一个参数,因此空格不再作为分隔符,而作为口令的一部分)

u

返回


+OK
:邮件锁住并已经准备好;

-ERR
:无效口令或无法锁住邮件。

u

例程


C: USER mrose

S: +OK mrose is a real hoopy frood

C: PASS secret

S: +OK mrose's maildrop has 2 messages (320 octets)

...

C: USER mrose

S: +OK mrose is a real hoopy frood

C: PASS secret

S: -ERR maildrop already locked

 

 

 

 

5.   






作”
状态




 


一旦客户
向服务器成功地确认了自己的身份,服务器将锁住并打开相应的邮件,这时
POP3
会话进入

操作

状态。现在客户可以重复下面的
POP3
命令,对于每个命令服务器都会返回应答。最后,客户发送
QUIT
命令,会话进入

更新

状态。

 

下面是在

操作

状态中可用的命令:

 

STAT 


(无)




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

u       

说明



STAT  
仅在

操作

状态下可用。
 
服务器以包括邮件信息的响应做为

确认

。为简化语法分析,所有的服务器要求
使用邮件列表的特定格式。

确认

响应由一个空格,以八进制表示的邮件数目,一个空格和邮件大小。这是最小实现,高级的实现还需要别的信息。

注意:被
标记为删除的信件不在此列。

u       

返回



 +OK

 nn mm

u       

例程



C: STAT

S: +OK 2 320

 

LIST [msg]




返回邮件
数量和每个邮件的大小。

u       

说明



LIST  
信件数目(可选),如果出现,不包
括标记为删除的信件。
 
仅在

操作

状态下可用。
 
如果给出了参数,且
POP3
服务器返回包括上述信息的

确认

,此行称为信息的

扫描表



如果没有
参数,服务器返回

确认

响应,此响应便以多行给出。在初的
+OK
后,对于每个信件,服务器均给出相应
的响应。

为简化语
法分析,所有服务器要求使用扫描表的特定格式。它包括空格,每个邮件的确切大小。这是最小实现,高级的实现还需要别的信息。

注意:被
标记为删除的信件不在此列。

u       

返回



 +OK
:其后跟扫描表;

-ERR
:无扫描。

u       

例程



C: LIST

S: +OK 2 messages (320 octets)

S: 1 120

S: 2 200

S: .

...

C: LIST 2

S: +OK 2 200

...

C: LIST 3

S: -ERR no such message, only 2 messages in maildrop

 

RETR <msg>




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

u       

说明



RETR 
不包括标记为删除的信件数目。
 
仅在

操作

状态下可用。
 
如果服务器返回

确认

,给出的响应是多行的。在初始的
+OK
后,服务器发送与给定信息号对应的信
息,对于多行响应,注意字节填充终止符。
 

u       

返回



+OK
:消息在其后;

-ERR
:其后无消息。

u       

例程



C: RETR 1

S: +OK 120 octets

S: …

S: .

 

DELE <msg>




          

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

u       

说明



DELE  
不包括标记为删除的信件数目。
 
仅在

操作

状态下可用。
 
服务器将此信件标记为删除,以后任何
关于此信件的操作就会产生错误。服务器在会话进入

更新

状态前不会真正删除此信件。
 

u       

返回



+OK
:信件被删除;

-ERR
:无此信件。

u       

例程



C: DELE 1

S: +OK message 1 deleted

...

C: DELE 2

S: -ERR message 2 already deleted

 

 

NOOP


(无)




服务器返
回一个肯定的响应。

u       

说明



NOOP  
仅在

操作

状态下可用。
 
服务器仅返回

确认



u       

返回


+OK
:确认。

u       

例程



C: NOOP

S: +OK

 

RSET


(无)




服务器将
重置所有标记为删除的邮件,用于撤消
DELE
命令

u       

说明



RSET 
(无)
 
仅在

操作

状态下可用。
 
所有被标记为删除的信件复位,服务器
返回

确认


 

u       

返回



+OK

u       

例程



C: RSET

S: +OK maildrop has 2 messages (320
个字符
)

 

 

6.   






新”
状态




 

当客户在

操作

状态下发送
QUIT
命令后,会话进入

更新

状态。(注意:如果客户在

确认

状态下发送
QUIT
后,会话并不进入

更新

状态。)

如果会话
因为
QUIT
命令以外的原因中断,会话并不进入

更新

状态,也不从服务器中删除任何信件。

 

QUIT 


(无)




退出并更
新。

u       

说明



QUIT 
(无)
 
(无)
 
服务器删除所有标记为删除的信件,然
后释放排它锁,并返回这些操作的状态码。最后
TCP
连接被中断。

u       

返回



+OK

u       

例程



C: QUIT

S: +OK dewey POP3 server signing off (
清空标记邮件
)

...

C: QUIT

S: +OK dewey POP3 server signing off 

 

 

 

7.   


可选的POP3
命令




 

以上讨论
的命令是对
POP3
服务的最小实现。以下说明的可选命
令允许客户更方便地处理信件,这是一个比较一般的
POP3
服务实现。

 

TOP
<msg n>




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

u       

说明



TOP msg n 
一个是未被标记为删除的信件数,另
一个是非负数(必须提供)
 
仅在

操作

状态下使用。
 
如果服务器返回

确认

,响应是多行的。在初始的
+OK
后,服务器发送信件头,一个空行将信件头和信件体分开,对于多行响应要注意字节填充终止符。

注意:如
果客户要求的行数比信件体中的行数大,服务器会发送整个信件。

u       

返回



 +OK
:其后有信件头;

-ERR
:其后无类似消息。

u       

例程



C: TOP 1 10

S: +OK

S: <
服务器发送消息头,一个空行和信件
的头
10

>

S: .

...

C: TOP 100 3

S: -ERR no such message

 

UIDL
[msg]




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

u       

说明



UIDL [msg] 
信件数(可选)。如果给出信件数,
不包括被标记为删除的信件。
 
仅在

操作

状态下使用。
 
如果给出了参数,且
POP3
服务器返回包括上述信息的

确认

,此行称为信息的

独立
-ID



 

如果没有
参数,服务器返回

确认

响应,此响应便以多行给出。在初的
+OK
后,对于每个信件,服务器均给出相应
的响应。此行叫做信件的

独立
-ID




为简化语
法分析,所有服务器要求使用独立
-ID
表的特定格式。它包括空格和信件的独立
-ID


信件的独

-ID

0x21

0x7E
字符组成,这个符号在给定的存储邮件
中不会重复。

注意:信
件不包括被标记为删除的信件。

u       

返回



 +OK
:其后是独立
-ID
表;

-ERR
:其后无类似信件。

u       

例程



C: UIDL

S: +OK

S: 1 whqtswO00WBw418f9t5JxYwZ

S: 2 QhdPYR:00WBw1Ph7x7

S: .

...

C: UIDL 2

S: +OK 2 QhdPYR:00WBw1Ph7x7

...

C: UIDL 3

S: -ERR no such message, only 2 messages in maildrop

 

APOP
<name> <digest>




       

Digest

MD5
消息摘要。

u       

说明



APOP name digest 
指定邮箱的字串和
MD5
摘要串。
 
仅在
POP3
确认后的

确认

状态中使用。
 
通常,每个
POP3
会话均以
USER/PASS
互换开始。这导致了用户名和口令在
网络上的显式传送,这不会造成什么危险。但是,许多客户经常连接到服务检查信件。通常间隔时间比较短,这就加大了泄密的可能性。

另一种提


确认

过程的方法是使用
APOP
命令。

实现
APOP
命令的服务器包括一个标记确认的时间
戳。例如:在
UNIX
上使用
APOP
命令的语法为:
process-ID.clock@hostname
,其中进程
-ID
是进程的十进制的数,时钟是系统时钟
的十进制表示,主机名与
POP3
服务器名一致。

客户记录
下此时间戳,然后以送
APOP
命令。
name
语法和
USER
命令一致。
Digest
是采用
MD5
算法产生的包括时间戳和共享密钥的字串。此密钥是客户和服务器共知的,应该注意保护此密钥,如果泄
密,任何人都能够以用户身份进入服务器。

如果服务
器接到
APOP
命令,它验证
digest
,如果正确,服务器返回

确认

,进入

操作

状态;否则,给出

失败

并停留在

确认

状态。

注意:共
享密钥的长度增加,解读它的难度也相应增加,这个密钥应该是长字符串。

u       

返回



+OK
:邮件锁住并准备好;

-ERR
:拒绝请求。

u       

例程



S: +OK POP3 server ready 1896.697170952@dbc.mtview.ca.us

C: APOP mrose c4c9334bac560ecc979e58001b3e22fb

S: +OK maildrop has 1 message (369 octets)

 

在此例子
中,共享密钥
 <1896.697170952@dbc.mtview.ca.us>tanstaaf

MD5
算法生成,它产生了
digest
值,
 c4c9334bac560ecc979e58001b3e22fb

 

 

 

8.   


POP3



令总结




 


命令



参数



状态



描述



USER


username


认可


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


PASS


password


认可


 


APOP


Name , Digest


认可


Digest

MD5
消息摘要


 


STAT


None


处理


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


UIDL


[ Msg # ]


处理


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


LIST


[ Msg # ]


处理


返回邮件数量和每个邮件的大小


RETR


[ Msg # ]


处理


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


DELE


[ Msg # ]


处理


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


RSET


None


处理


服务器将重置所有标记为删除的邮件,
用于撤消
DELE
命令


TOP

[ Msg # ]


处理

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

NOOP

None

处理

服务器返回一个肯定的响应

 

QUIT

None

更新

 

 


 

基础的
POP3
命令:

USER name 


确认

状态有效

PASS string

QUIT

STAT 


操作

状态有效

LIST [msg]

RETR msg

DELE msg

NOOP

RSET

QUIT 


更新

状态有效

 

可选的
POP3
命令:

APOP name digest 


确认

状态有效

TOP msg n 


操作

状态有效

UIDL [msg]

 

POP3 
响应:

+OK

-ERR

注意:除

STAT

LIST

UIDL
的响应外,其它命令的响应均为
"+OK"

 "-ERR"
。响应后的所有文本将被客户略去。

 

 

 

9.   


POP3



话实例




 

S: <
等待连接到
TCP
端口
110>

C: <
打开连接
>

S: +OK POP3 server ready 1896.697170952@dbc.mtview.ca.us

C: APOP mrose c4c9334bac560ecc979e58001b3e22fb

S: +OK mrose's maildrop has 2 messages (320 octets)

C: STAT

S: +OK 2 320

C: LIST

S: +OK 2 messages (320 octets)

S: 1 120

S: 2 200

S: .

C: RETR 1

S: +OK 120 octets

S: <
服务器发送信件
1>

S: .

C: DELE 1

S: +OK message 1 deleted

C: RETR 2

S: +OK 200 octets

S: <
服务器发送信件
2>

S: .

C: DELE 2

S: +OK message 2 deleted

C: QUIT

S: +OK dewey POP3 server signing off (maildrop empty)

C: <
关闭连接
>

S: <
等待下一次连接
>

 

 

 

10.


消息格式




 

在会话过
程中的消息格式都假定与
Internet
文本消息格式标准一致。应该注意的是,由于各个服务器对于换行符的处理不同,因此计数不一定相同。通常,在

确认

状态中,服务器能够以八进制计算信件
的大小。例如,如果在打开储存邮件时服务器内部认定换行符代表一个字符,一般服务器在计算它时作为两个字符计。注意,以终止符开始的消息行不被计数两次,
因为客户将在接收到多行响应后删除所有字节填充。

 

 

 

11.


安全性考虑




 

可以推
测,使用
APOP
命令可以提供会话期间的保护。相应
的,同时实现
PASS

APOP
命令的服务器只允许用户以一种方式访
问;也就是说要么使用
USER/PASS
组合,要么使用
APOP
命令,不能同时使用两个。

而且,注
意随着共享密钥长度的增加,解读的难度也就上升了。服务器要提供用户名时不给出任何响应,不给出任何暗示此用户名是否正确。而口令却在网络上显式传送;使

RETR

TOP
命令在网络上显式传送信件。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息