插图:

14.1.3 POP3
邮局协议(Post Office Protocol Version 3,POP3)提供了一种对邮件消息进行排队的标准机制,这样接收者以后才能检索邮件。POP3服务器也运行在TCP/IP之上,并且在默认端口110上监听。在客户和服务器之间进行了初始的会话之后,基于文本的命令序列可以被交换。POP3客户利用用户名和口令向POP3服务器认证。POP3中的认证是在一种未加密的会话基础之上进行的。POP3客户发出一系列命令发送给POP3服务器,如请求客户邮箱队列的状态、请求列出的邮箱队列的内容和请求检索实际的消息。POP3代表一种存储转发类型的消息传递服务。现在,大部分邮件服务器都采用SMTP发送邮件,同时使用POP3接收电子邮件消息。
下面介绍如何通过POP3接收邮件,并且如果不特殊指明,POP指的即是POP3。通常的邮件服务器同时支持SMTP和POP,SMTP运行在25端口上,而POP运行在110端口上。
1. POP3命令
与SMTP一样,POP也是由建立在TCP基础之上的文本命令构成。和其他的文本命令语言一样,POP3命令也是由一个命令后跟零个或多个参数组成的。其形式为:
COMMAND
…
每个参数最多可以有40个字符长。
但是POP3服务器在执行命令后返回客户端的响应与SMTP服务器有所不同。本章前半部分讲述的SMTP中,服务器对命令响应的形式是“状态码 CRLF”,客户端通过状态码了解服务器对命令的理解和执行的状态。而在POP中,服务器响应有两种形式:
正确响应 以+OK开头,后跟文本或以文本编码的状态信息,以回车换行结束;
错误响应 以–ERR开头,后跟文本或以文本编码的状态信息,以回车换行结束。
因此,在对POP进行编程时,只需要对读取的响应信息的第一个字符做出判断,就可以确定服务器是否正确理解了客户的命令并执行。关于POP的详细描述和定义,请参考RFC1725中对此的定义。
对应某些命令的响应信息可能有多行。这种情况下,当服务器传送完第一行响应信息(第一行信息包含+OK/–ERR),就直接发送后续的行,每一行同样以回车换行结尾。当所有的响应行都发送后,接着发送一个结束行。结束行包含一个结束符。这个结束符为“.”(其ASCII编码为046),然后跟一个回车换行。由于每一个响应信息行都包含回车换行符,因此,响应信息结束处一定有这样五个字节CRLF.CRLF。当确定多行响应信息是否结束时,如果遇到CRLF.CRLF就可以认为响应结束,再把CRLF.CRLF
……