POP3协议简单介绍

时间:2022-06-01 19:04:37
在Internet,POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。这个协议很容易学,因为它只包含12个命令(其中有3个你完全可以忽略它们的存在)。这些命令被客户端计算机用来发送 给远程 服务 器。反过来, 服务 器返回给客户端计算机两个回应代码。如果你还没有看本站另一篇文章-“Winsock Terminal 示例程序”的话,请先阅读那篇文章,因为你需要那个程序来做实验。 

运行示例程序,单击工具栏上的"Connect to"按钮。在弹出的对话框中输入你要连机的邮件 服务 器的地址例如: 

mail.comset.net 

选择POP3协议,然后单击"Connect"按钮。如果成功的话(如果出错,肯定是你 服务 器地址有问题,别怀疑到程序头上来),你会在文本框中看到 服务 器返回给你的信息。我的 服务 器的应答如下: 

+OK POP3 mail.comset.net v5.49 server ready 

这个字符串告诉你连机成功了。不同 服务 器的回应会有所不同,但开头部分都是一样的,那就是: 
"+OK"。它的意思是 服务 器接受客户端计算机所使用的命令顺序及语法。如果开头是"-ERR",则表示你使用了错误的命令。在你的应用程序中,只须处理来自 服务 器的回应的前面几个字符。这么小的处理量正是POP3相对其它协议的优势所在。 

授权状态 

好了,现在我们已经建立了同 服务 器的连接并且从 服务 器那里得到了肯定的回答。接下来要做的就是告诉 服务 器你的身份。 服务 器要管理成千上万个邮箱并不是件好难的事。它已为每个邮箱建立好了一个帐户。每个帐户由用户名和密码构成。当你连上 服务 器后,要发送的第一个命令就是USER,用户名是该命令的参数。具体写法如下: 

USER username 

如果用户名已注册, 服务 器将返回一条正确的消息,然后你就可以输入下面的命令,告诉 服务 器你的密码。 

PASS password 

如果用户名和密码吻合的话, 服务 器同样会返回一条正确的消息,告诉你可以进入下一阶段,即TRANSACTION state. 

TRANSACTION状态 

为了知道你的邮箱中目前有多少封邮件以及这些邮件的大小,可使用STAT命令。它会告诉你邮箱目前的状态。 服务 器所返回的信息可能会是下面的样子: 

+OK 0 0 (你的邮箱中没有邮件) 
+OK 3 825 (你的邮箱中有三封邮件,大小为825个八位字节) 

如果邮箱中没有邮件,就没有什么好做的了,用QUIT命令就可结束同 服务 器的连接。如果邮箱中有邮件的话,你可以用RETR命令把邮件下载到你自己的机器上。这个命令要求邮件的索引作为其参数。例如,如果我们想收第一封邮件,可输入如下命令: 

RETR 1 

要想取回其它的邮件,用上面的命令加上相应的邮件编号就行了。如果你输入的邮件编号超过了信箱中的邮件数量, 服务 器就会返回一个 "-ERR" 给你。作为对RETR命令的回应, 服务 器会返回给你一个字符串。这个字符串包含下面这些东西:"+OK"、邮件大小、邮件文本以及一个包含小数点的字符串。最后一个字符串,也就是小数点表示消息的结束。例如: 

Client: RETR 2 
Server: +OK 234 octets 
Server: <邮件文本> 
Server: . 

注意上面收邮件的过程并不意味着将这些邮件转移到你的计算机上。你是得到这些邮件的一份拷贝,你的住信箱中仍会存放这些邮件直到你用DELE命令删除它们。同样地,DELE命令也需要你提供邮件的索引号。实际上,当你使用了DELE命令后,这些邮件并不是立即从 服务 器上删除。这些邮件只是被做上了一个删除的标记,当你断开同 服务 器的连接后,才真正从 服务 器上删除。如果你想移除这些删除标记,用RSET命令。这个命令并不针对某一个特定的邮件,而是移除所有删除标记,所以你不需要提供邮件索引号给这个命令。 

除了上面所说的命令之外,当你还处在TRANSACTION状态时,POP3还支持另外两个命令。这两个命令是:LIST和NOOP。LIST命令可用来列出邮件的信息。就象下面所显示的一样: 

Client: LIST 
Server: +OK 2 messages (320 octets) 
Server: 1 120 
Server: 2 200 
Server: . 

通过对LIST命令提供邮件索引号,可列出特定邮件的信息,如下例: 

Client: LIST 2 
Server: +OK 2 200 

NOOP命令具体的事情不做,只是用来检查同 服务 器的连接。 

UPDATE状态 

当你处于UPDATE状态时,你只有一个命令可用,那就是:QUIT。用这个命令来确认你所做的所有改变,删除被标上删除标记的邮件以及关闭连接。 

其它POP3命令 

POP3协议还支持另外三个命令:TOP、UIDL及APOP。这里只介绍第一个命令。TOP命令可用来获取邮件头及被预定义的一块字符串。通常如果你的邮箱中中一封容量很大的邮件时,这个命令特别有用。用TOP命令,你可以只显示邮件头的信息,从中找出邮件作者有主题。你甚至可以只下载这部分信息。该命令的语法如下: 

TOP msg n 

msg - 邮件的索引号 

n - 你想要显示的行数
什么是POP  

  大家一听这个POP,读起来有点像是中文中的泡泡,其实这是一个英文术语的缩写。POP的全称是 Post Office Protocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口。现在常用的是第三版 ,所以简称为 POP3。POP3仍采用Client/Server工作模式,Client被称为客户端,一般我们日常使用电脑都是作为客户端,而Server(服务器)则是网管人员进行管理的。举个形象的例子,Server(服务器)是许多小信箱的集合,就像我们所居住楼房的信箱结构,而客户端就好比是一个人拿着钥匙去信箱开锁取信一样的道理。 

   POP在网络模型中的层次  

  大家都知道网络是分层的,而这个分层就好比是一个企业里的组织结构一样。在日常使用电脑过程中,人操作着电脑,人就好比是指挥电脑对因特网操作的首席执行官。当我们打开Foxmail这个邮件软件收取邮件时,Foxmail这个软件就会调用TCP/IP参考模型中的应用层协议—POP协议。 

  应用层协议建立在网络层协议之上,是专门为用户提供应用服务的,一般是可见的。如利用FTP(文件传输协议)传输一个文件请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。而这时POP协议则会指挥下层的协议为它传送数据服务器,最后Foxmail通过一系列协议对话后成功将电子邮件保存到了Foxmail的收件箱里。TCP/IP参考模型是Internet的基础。和OSI的7层协议比较,TCP/IP参考模型中没有会话层和表示层。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族(或协议包),包括100多个相互关联的协议,其中IP(Internet Protocol,网际协议)是网络层最主要的协议;TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是传输层中最主要的协议。一般认为IP、TCP、UDP是最根本的三种协议,是其它协议的基础。 

  相信读者了解TCP/IP框架之后,一定会对各层产生一定的兴趣,不过我们对于这个模型的理解也是一步步来的。在这里,我们首先只要知道相应的软件会调用应用层的相应协议,比如Foxmail会调用POP协议,而IE浏览器则会调用DNS协议先将网址解析成IP地址。在实际收取邮件的过程中,POP这个应用层的协议会指挥TCP协议,利用IP协议将一封大邮件拆分成若干个数据包在Internet上传送。 

  为了便于读者理解这个过程,笔者举个例子来说明一下,比如你要和一个人远距离通话,因为距离实在太远了,你只好将你所表达的一大段分成一个个字大声喊,而对方把每个听到的字写在纸上,当写下来后就大喊一声告诉你它收到了,这样就克服了距离远听不清的弱点,这种一问一答的反馈机制就好比是TCP协议,POP服务器一般使用的是TCP的110号端口。 

   POP工作原理简介  

  下面就让我们一起来看看电子邮件软件收取电子邮件的过程,一般我们在电子邮件软件的账号属性上设置一个POP服务器的URL(比如pop.163.com),以及邮箱的账号和密码。这个在收信过程中都是用得到的。当我们按下电子邮件软件中的收取键后,电子邮件软件首先会调用DNS协议对POP服务器进行解析IP地址,当IP地址被解析出来后,邮件程序便开始使用TCP协议连接邮件服务器的110端口,因为POP服务器是比较忙的,所以在这个过程中我们相对要等比较长的时间。当邮件程序成功地连上POP服务器后,其先会使用USER命令将邮箱的账号传给POP服务器,然后再使用PASS命令将邮箱的账号传给服务器,当完成这一认证过程后,邮件程序使用STAT命令请求服务器返回邮箱的统计资料,比如邮件总数和邮件大小等,然后LIST便会列出服务器里邮件数量。然后邮件程序就会使用RETR命令接收邮件,接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态。当使用QUIT时,邮件服务器便会将置为删除标志的邮件给删了。通俗地讲,邮件程序从服务器接收邮件,其实就是一个对话过程,POP协议就是用于电子邮件的一门语言。