POP3协议详细介绍(一)

时间:2021-03-04 00:26:38
 

1. POP3跟SMTP一样,也是个Request/Response协议,命令和响应都是基于ASCII文本,并以CR和LF(/r/n)符结束,响应包括一个表示返回状态的符号(+/-),另外是描述信息.
        Request标准格式:  Command [Parameter] CRLF
        Response标准格式: +OK/[-ERR] description CRLF
2. POP3在TCP协议110号端口(默认端口,可以更改)监听连接请求.
3. POP3的基本命令集合:
         USER name               用户名指定
         PASS string             密码指定(明文)
         QUIT    退出命令,结束当前POP3对话
         STAT                    统计邮件命令
         LIST [msg]              列出当前邮件命令
         RETR msg   获取某一邮件(根据邮件序号来获取)
         DELE msg   删除某一邮件(根据邮件序号来删除)
         NOOP    无操作
         RSET    用于撤消DELE命令
      可选命令集合:
         APOP name digest        valid in the AUTHORIZATION state
         TOP msg n               valid in the TRANSACTION state
         UIDL [msg]  
      POP3回复:
         +OK
         -ERR
    正向符号+表示成功,负向符号-表示失败。

     由于前面的POP3版本需要明码验证,对于密码的安全是个大挑战,毕竟网络上的Sniffer到处都是,如何保护密码的安全很重要,因此在后面的RFC1939中详细地描述了增强的APOP命令来支撑整个密码验证过程,具体验证过程如下:
     服务器端在跟客户连接后会发送一个message,最后的一部分就是Digest secret的一部分(使用空格作为间隔),大体格式如下<process-ID.clock@hostname>,由于采用了clock值确保了其对于每个客户端的唯一性。
     客户端收到上述消息后进行解码并且将最后部分形如<process-ID.clock@hostname>附加上用户密码进行MD5计算,得到digest值。
     然后复合整个命令行APOP name digest并且发送出去。
     注意并不是每个服务器都能支持APOP命令,需要先判断前面的消息返回体是否形如<process-ID.clock@hostname>。

    在接下来的章节中将通过C#的一个例子程序详细地解释一下整个POP3协议的具体收发过程;

 

RFC参考系列:

  • RFC 918 – POST OFFICE PROTOCOL
  • RFC 937 – POST OFFICE PROTOCOL – VERSION 2
  • RFC 1081 – Post Office Protocol – Version 3
  • RFC 1939 – Post Office Protocol – Version 3 (STD 53)
  • RFC 1957 – Some Observations on Implementations of the Post Office Protocol (POP3)
  • RFC 2195 – IMAP/POP AUTHorize Extension for Simple Challenge/Response
  • RFC 2384 – POP URL Scheme
  • RFC 2449 – POP3 Extension Mechanism
  • RFC 2595 – Using TLS with IMAP, POP3 and ACAP
  • RFC 3206 – The SYS and AUTH POP Response Codes
  • RFC 5034 – The Post Office Protocol (POP3) Simple Authentication and Security Layer (SASL) Authentication Mechanism