Skip to main content

3. Basic Operation (基本操作)

最初, 服务器主机通过侦听TCP端口110来启动POP3服务. 当客户端主机希望使用该服务时, 它与服务器主机建立TCP连接. 连接建立后, POP3服务器发送问候消息. 然后客户端和POP3服务器交换命令和响应 (分别为command和response), 直到连接关闭或中止.

POP3中的命令由不区分大小写的关键字组成, 可能后跟一个或多个参数. 所有命令都以CRLF对终止. 关键字和参数由可打印的ASCII字符组成. 关键字和参数各自由单个空格字符分隔. 关键字长度为三个或四个字符. 每个参数最多可以有40个字符长.

POP3中的响应由状态指示器和关键字组成, 可能后跟附加信息. 所有响应都以CRLF对终止. 响应最多可以有512个字符长, 包括终止的CRLF. 当前有两个状态指示器: 正面 ("+OK") 和负面 ("-ERR"). 服务器必须 (MUST) 以大写形式发送"+OK"和"-ERR".

某些命令的响应是多行的. 在这些情况下 (下文将明确指出), 在发送响应的第一行和CRLF后, 会发送任何附加行, 每行都以CRLF对终止. 当响应的所有行都已发送时, 会发送最后一行, 由终止八位字节 (十进制代码046, ".") 和CRLF对组成. 如果多行响应的任何行以终止八位字节开头, 则通过在响应的该行前面添加终止八位字节来进行"字节填充" (byte-stuffed). 因此, 多行响应以五个八位字节"CRLF.CRLF"终止. 在检查多行响应时, 客户端检查该行是否以终止八位字节开头. 如果是, 并且在CRLF之后还有其他八位字节, 则去掉该行的第一个八位字节 (终止八位字节). 如果是, 并且CRLF紧跟在终止字符之后, 则来自POP服务器的响应结束, 包含".CRLF"的行不被视为多行响应的一部分.

POP3会话在其生命周期中会经历多个状态. 一旦TCP连接打开并且POP3服务器发送了问候消息, 会话进入授权状态 (AUTHORIZATION state). 在此状态下, 客户端必须 (MUST) 向POP3服务器标识自己. 一旦客户端成功完成此操作, 服务器获取与客户端邮箱相关的资源, 会话进入事务状态 (TRANSACTION state). 在此状态下, 客户端请求POP3服务器执行操作. 当客户端发出QUIT命令时, 会话进入更新状态 (UPDATE state). 在此状态下, POP3服务器释放在事务状态期间获取的任何资源并道别. 然后关闭TCP连接.

服务器必须 (MUST) 通过使用负面状态指示器响应无法识别、未实现或语法无效的命令. 服务器必须 (MUST) 通过使用负面状态指示器响应在会话处于不正确状态时发出的命令. 客户端没有通用方法来区分不实现可选命令的服务器和不愿意或无法处理该命令的服务器.

POP3服务器可以 (MAY) 具有不活动自动登出计时器. 这样的计时器必须 (MUST) 至少为10分钟的持续时间. 在该间隔期间从客户端接收任何命令应足以重置自动登出计时器. 当计时器到期时, 会话不会 (does NOT) 进入更新状态——服务器应关闭TCP连接而不删除任何消息或向客户端发送任何响应.


术语表:

  • CRLF: Carriage Return Line Feed (回车换行)
  • AUTHORIZATION state: 授权状态
  • TRANSACTION state: 事务状态
  • UPDATE state: 更新状态
  • byte-stuffed: 字节填充
  • status indicator: 状态指示器
  • maildrop: 邮箱投递点

RFC 2119关键词:

  • MUST (必须): 绝对要求
  • MAY (可以): 允许但可选