通过telnet或OpenSSL测试POP3服务器

建立连接

首先,通常的过程是通过telnet到POP3服务器端口(通常在TCP端口110上)。这将非常简单:

telnet mail.example.com 110

但是,如今,大多数POP3服务器都通过SSL(通常位于端口995上)进行保护。如果尝试在仅SSL的POP3服务器上使用telnet,则会收到错误消息“在此状态下命令无效”,例如作为:

Trying 127.0.0.1...
Connected to mail.example.com.
+OK The Microsoft Exchange POP3 service is ready.
USER yiming
-ERR Command is not valid in this state.

或者

Trying 10.0.1.202...
Connected to mail2.example.com.
Escape character is '^]'.
USER yiming
Connection closed by foreign host.

遇到这种情况时,应改用OpenSSL的s_client来执行必要的SSL协商。

openssl s_client -connect mail.example.com:995

或者

openssl s_client -crlf -connect mail.example.com:110 -starttls pop3

第二个通常用于Microsoft Exchange服务器。注意-crlf选项,该选项告诉s_client发送\ r \ n行尾。如果服务器使用了错误的行尾,则症状是服务器将不响应任何命令。当您盯着telnet会话中的空白响应或空白行时,它只会坐在那里等待进一步的输入。

验证

建立连接后,现在有必要作为POP3用户进行身份验证。在最简单的情况下,将使用纯文本身份验证。在这种情况下,将使用命令USER [用户名]来建立用户名,并使用PASS [密码]来以明文形式建立密码。(由于连接采用SSL加密,因此此纯文本可能无关紧要)。

+OK Server ready
USER yiming
+OK
PASS foobar
+OK Logged in.
Server interactions

这里有几个命令很有用。

LIST –列出用户帐户中可用的消息,返回状态消息,并列出每行包含消息编号和该消息大小的列表(以字节为单位)
STAT –返回状态消息,邮箱中消息的数量和大小邮箱的字节数
RETR [message_num] –返回由消息号标识的消息,该消息号与LIST命令输出中显示的消息号相同
TOP [message_num] [n] –返回表示的消息的前n行按消息号。
完成后,QUIT命令将结束会话。