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