📄 rfcrfc937.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:lou_goodman(lou_goodman lou_oxygen@163.com)
译文发布时间:2001-5-8
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group M. Butler
Request for Comments: 937 J. Postel
D. Chase
J. Goldberger
J. K. Reynolds
Obsoletes: RFC 918 ISI
February 1985
邮局协议 (版本2)
(RFC 937 POST OFFICE PROTOCOL - VERSION 2)
一: 提要:
这篇RFC文档提供了一种使工作站动态的从邮件服务器获取邮件的简单方法.它着重阐
述了符合ARPA标准的因特网的邮件协议,并为它的进一步发展提供了建议和讨论.它是
RFC 918的更新.你可以自由传播这个文档.
二: 引言
邮局协议(版本2)的目的是为了让用户的工作站从邮件服务器获取邮件.它也应该允许邮
件从工作站通过简单邮件传递协议(SMTP)发送到邮件服务器.更多内容请参考POP2 821[1]
和POP2 822[2].
这个协议假定已经存在了一个可靠的数据流,比如由TCP协议或其它协议提供的数据流.
如果是TCP协议,则POP2协议服务器从109端口进行监听.
三: 系统模型和分析
当我们给一工作站分配一个IP地址从而把它当作一个因特网主机时,我们并不希望它包
含用户的邮箱.我们希望有一个专门的有服务器来提供邮箱服务.
当然我们知道提供这种服务的机器的最重要的要求是它要健壮.一台经常宕机的机器是
不适合作邮件服务器的.
POP2协议是为局域网(比如Ethernets)上工作站和服务器之间的短时延,高传输率的通讯
而设计的.POP2协议也可以工作在其它类型的网络上.但如果网络环境有了很大的改变,一个
新的协议可能是必要的.
设想有一个用户叫John Smith ,它的计算机叫FIDO,它的邮件服务器叫DOG-HO
USE .则它的邮件地址是JSmith@DOG-HOUSE.ARPA( 而非JS
mith @FIDO.ARPA)
这也就是说,邮件是在邮件服务器的邮箱中存放.!!!协议只不过提供了一种浏览邮箱
中邮件的机制.
用户的工作站和服务器之间没有任何的关系,用户的工作站也不作为邮件地址的一部
分.
这是一个非常简单的协议.它不是一个用户界面.我们希望我们的计算机上有一个友好
的程序.但事实上,该协议一点也不友好.它的一个基本规则是:如果存在任何错误就断开
连接.
POP2协议根本不对消息做任何处理,它也部分析消息头(Date:, From:, To:, Cc:, or
Subject:).POP2协议之间的将消息从服务器传到客户工作站.
四: POP2协议
POP2协议是一系列命令和回答的集合.它来自ARPA网络的其
它许多已经存在的协议.
服务器必须监听一个连接.当一个连接被建立时,服务器发送一个
greeting消息并等待用户的其它命令.当命令到达时,服务器进行处理,
并给与用户答复.
客户打开一个连接,等待greeting 消息,然后发送HELO命令,
包括用户的姓名和密码的参数给服务器进行认证从而获取邮件.服务器返回默认
邮箱的邮件数目给用户.
用户可以阅读默认邮箱的邮件,也可以用FOLD 命令来选择邮箱.
同样,服务器将返回用户所选择的邮箱的邮件数.
用户用READ 命令开始阅读邮件.READ命令应该包含一个参数,用来指定要
阅读的邮件序号,默认值是当前邮件(即一个新文件夹打开时的第一条邮件).然后
,服务器开始向用户发送邮件的内容.
用户可以用RETR命令来请求获得消息的目录.
当所有的数据都被接收时,用户发送确认消息.这就是ACKS,ACKD和NACK.
ACKS 意味着"我已经成功的收到了消息,请将它保存在邮箱中".
ACKD 意味着"我已经成功的收到了消息,请将它从邮箱中删除".
NACK 意味着"我没有受到消息,请将它保存在邮箱中".
接收到ACKS和ACKD命令后,服务器将消息指针指向下一条消息;接收到NACK
命令后,消息指针保持不变.
所有情况下,服务器返回当前消息的内容.
用户用QUIT命令关闭一个对话,服务器返回一个消息--- OK.
正常的对话过程如下表示:
用户 服务器
等待连接
打开连接 -->
<-- 服务器进入就绪状态,等待命令
HELO命令和账号.密码 -->
<-- 发送 #13 消息,等待命令
读取#13消息 -->
<-- =537 characters in that message
等待命令
RETR 命令 -->
<-- (发送数据)
等待命令
ACKS消息 -->
<-- =0 数据传输完毕
Wait for Command
QUIT -->
<-- + OK
关闭连接 --> <-- 关闭连接
等待连接(回到初始状态)
参数
下面的参数有确定的含义:
user – 用户账号
password – 账号密码
mailbox – 邮箱名(或文件夹名)
默认邮箱
TOPS-20系统
MAIL.TXT.1 - from login directory
UNIX系统
/usr/spool/mail/user
和
/usr/user/Mail/inbox/*
"user" 是由HELO命令提供的参数.
文件结束标志
文件结束标志是由一个回车符(CR)和换行符(LF)表示的.在文件中用"CRLF"表示.
这个标志在在命令和回答中都会用到.
消息长度
对READ 命令和确认命令(ACKS,ACKD,NACK)的回答是下一个要传递的消息的长度,
包括所有消息字符.CRLF 被认为是两个字符.长度为零的消息意味着消息不存在或为
空.请求传递一个零长度的消息意味着关闭连接.这是在因特网标准RFC 822 和 NVT-
ASCII中定义的.
邮件数
对HELO和 FOLD命令的回答是被选邮箱中邮件的数目的统计.READ 命令需要一个
参数来指定要阅读的邮件.所有的数都用十进制来表示,并且从一开始.这意味着邮箱中
第一条邮件用"1"来表示.
这篇文档中的所有数字都用十进制来表示.
转义引用
一些情况下,参数中需要用特殊的字符,二这是语法所不允许的.例如:密码中的一
个空格.为了做到这一点,我们需要用转义会话.不幸的是,我们不得不采用让人讨厌的
字符.在本协议中,我们用反斜杠"\".参数中的一个空格字符需要用两个字符来表示"\
空格".这种转义引用只用在命令参数中,回答RETR命令的邮件数据不需要这种方法.
回答串
第一个字符必须时特别指定的(如 "+","-","=","#").紧跟的选项串可以是任意
值.
命令和回答的定义
命令和回答总汇
命令 回答
-------- -------
HELO user password + OK
FOLD mailbox - Error
READ [n] #xxx
RETR =yyy
ACKS
ACKD
NACK
QUIT
命令解释
HELO user password
HELO命令用来认证用户.它的信息被服务器用来确定用户对邮箱的使用权.
该命令的关键字是 HELO ,后面是用户的账号和密码,然后是CRLF.
可能的应答:
"#nnn" nnn是默认邮箱的邮件数.
"- error report" 错误报告并断开连接.
FOLD mailbox
该命令选择一个邮箱或一个文件夹.服务器必须判断用户是否有权限访问
该邮箱或文件夹.如果邮箱为空或不存在,消息数为0.该命令的关键字时"FOLD",
后面跟 mailbox参数,然后是CRLF.
可能的应答:
"#nnn" nnn是邮箱中邮件总数.
READ [nnn]
READ命令开始传递数据.如果READ命令中未给参数,意味着读取当前邮件.
一个READ命令首先设置邮件指针为参数值,然后服务器返回邮件长度.如果没有邮件可读,
返回的邮件长度等于零.如果邮件已经被ACKD命令 删除,也返回零长度.跟在READ命令后的
是RETR命令,READ命令,FOLD命令或QUIT命令.不要企图用RETR命令来操作一个零长度的
邮件.该命令的关键字是 "READ".接在后面的是邮件数参数和 CRLF.
可能的应答:
"=ccc" ccc是对应的邮件的长度
RETR
该命令确定用户已经做好接收邮件的准备.它必须跟一个确认命令.服务器
会断开连接,如果发送一个长度为零的消息(例如一个不存在的消息).该命令的关键字是"
RETR",后面跟一个CRLF.
可能的应答:
数据流或关闭连接
ACKS
该命令确认用户已经接收到邮件.该命令结束邮件数据的传输.邮件数据被保
存在邮箱中,邮件指针增加1.服务器返回下一个邮件数据长度或零(如果下一个邮件不存在
或已经被删除).该命令的关键字是"ACKS",后跟CRLF
可能的应答:
"=ccc" ccc是下一个邮件的长度
ACKD
该命令确认用户已经接收到邮件,结束邮件数据的传输,如果用户有对邮箱的
写权限则将对应的邮件从邮箱中删除. 事实上,只有在会话结束,邮箱被释放或用户选择另
外一个邮箱时才会发生改变.如果用户没有对邮箱的写权限,则邮箱不发生改变.服务器的应
答是相同,不管邮件是否被删除.然后,服务器将邮件指针指向下一个邮件,并返回它的长度.
相应的,如果邮件不存在或已经被删除,则返回零长度.该命令的关键字是"ACKD"然后是
CRLF.
可能的应答:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -