POP3与SMTP协议 联系客服

发布时间 : 星期一 文章POP3与SMTP协议更新完毕开始阅读5eb5d322ccbff121dd36831c

POP3协议

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC 1939 定义(见 Reference/rfc1939 pop3.html)。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

使用telnet 连接pop3

最直观的了解什么是POP3,我觉得采用telnet的方式用pop3连接到邮件服务器,进行邮件的接收是最有效的。

打开终端,(C:client, S:Server) C: telnet pop.163.com 110 协定端口为110)

S: Trying 202.108.5.100...

Connected to pop3.163.split.netease.com. Escape character is '^]'.

+OK Welcome to coremail Mail Pop3 Server (163coms[3d8c1fa079729fb6acc588e66d30360es])

(服务器通常开头返回+OK表示正确的回应,+ERR表示所发命令

(***处输入你的邮件用户名) (表示接受)

(***处输入密码,这里都是明文显示)

(这里表示服务器接受该帐户,服务器上对

有误)

C: USER ***** S: +OK core mail C: PASS *****

(用telnet方式连接163的pop3服务器,pop3

S: +OK 5 message(s) [9782 byte(s)] 应有5封邮件,总大小9782个字节) C:LIST 号和大小) S: +OK 5 9782 1 1298 2 1311 3 1224 4 1312 5 4637 . C: TOP 1 0 的头部信息)

S:+OK 1298 octets

(LIST 命令列出每一封邮件的信息,己每封邮件对应的ID

(格式 TOP num 0, num代表邮件ID号,返回该邮件

(服务器接受)

Received: from smtp.163.com (unknown [221.10.25.6])

(返回的相关内容)

by smtp1 (Coremail) with SMTP id C9GowLCLsyoRy_JI5Ci2Mg==.42306S2; Mon, 13 Oct 2008 12:14:10 +0800 (CST) Date: Mon, 13 Oct 08 12:14:09 +0800 (CST) From: tommy_mail@163.com

To: tommy_mail Subject: @@!$$%^& MIME-Version: 1.0

Content-Type: multipart/alternative; boundary=\ X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUUYxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUjlxYjsxI4VWxJwAYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1I0E4x80 FVCIwcAKzIAtM7C26IkvcIIF6IxKo4kEV4yl1IIY67AEw4v_Jr0_Jr4l5I8CrVACY4xI64

kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8JVWxJwAC Y4xI67k04243AVAKzVAKj4xxM4xvF2IEb7IF0Fy26I8I3I1lFVAaXTZC67ZELSn0mTvEwa V2v3VFvVW8M4IE42xK82IY64kIx2x0424lw4CEF2IF47xS0VAv8wAKzVCY07xG64k0F24l 7I0Y64k_MxkFs20EY4vE77kJMxkIecxEwVAFwVW8XwCY0x0Ix7I2Y4AK64vIr41l4x8a6c 8ajcxJMI8E67AF67kF1VAFwI0_Jr0_JrylIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY 6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z2 80aVCY1x0267AKxVW8JVW8Jr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjxU yYZXDUUUU

Message-Id: <48F2CB12.33901D.26072@m5-81.163.com> . C: RETR 2 码)

S: +OK 1311 octets

Received: from smtp.163.com (unknown [221.10.25.6])

by smtp4 (Coremail) with SMTP id DtGowLCrK4xUyvJIJeKfLg==.58545S2; Mon, 13 Oct 2008 12:11:00 +0800 (CST) . . . . . .

(格式 RETR num, num为邮件ID号,返回邮件全部源

--=-plenware_alt_-- . C: NOOP 动退出)

S: +OK core mail C: UIDL S: +OK 5 9782

1 1tbiYAaMeEJw1XtwEgAAss (由服务器产生的邮件唯一ID,RFC文档上说是服务器内唯一,但估计说成全球唯一也不为过) 2 1tbiYAeMeEJw1XtoyQAAsu 3 1tbiYRaMeEJw2LVItgAAsi 4 1tbiwQqMeEij15ERZQAAsm 5 1tbiwReMeEij15EzUgAAsu .

C: QUIT (退出命令) S: +OK core mail

Connection closed by foreign host.

-------------------------------------------------------------------------------------------------------------------------*

更加详细的关于telnet的描述可参看 Reference/telnet 操作 smtp pop.html

POP3协议的状态和相关命令 POP3有三种状态:

a) The AUTHORIZATION State

当一个TCP连接从客户端连接到服务器以后,就进入了这个状态。通过常服务器会返回以下类似的信息:

S: +OK POP3 server ready 退出这个状态使用命令

[QUIT] Command .....................退出与POP3服务器的连接 b) The TRANSACTION State

当用户成功连接并登录到邮件服务器后,就进入了TRANSACTION状态。这个状态下可以使用的命令有:

(邮件的唯一ID,通常称“独立-ID表”,用于唯一确定一封邮件,

通常用于客户端判别已读未读)

(空操作,起延时作用,服务器会在一定时间内无操作的话自

[STAT] Command .....................查看当前服务器邮件的总数和总大小 [LIST] Command .....................列出每封邮件对应的ID号和单个邮件大小 [RETR num] Command .....................返回对应ID邮件的全部内容 [DELE num] Command .....................删除对应ID邮件

[NOOP] Command .....................延迟命令,执行空操作,以延迟系统退出时间 [RSET] Command .....................当执行完删除命令后,要执行RESET命令才能在当前立即返回删除的效果 c) The UPDATE State

如果在TRANSACTION状态下发出QUIT命令,在退出POP3连接后会自动发出UPDATE状态。(如果在AUTHORIZATION状态下发出QUIT命令,则不会有UPDATE状态,这涉及到DELETE命令的效果)

其他的 Optional POP3 Commands

[TOP num] Command .....................列出对应ID邮件的邮件头信息

[UIDL num or UIDL] Command .....................列出全部或对应ID邮件的UIDL [USER name] Command .....................输入用户名 [PASS password] Command ...................输入密码

[APOP name digest] Command ............用于防护USER/PASS存在泄密的可能性。name digest指定邮箱的字串和MD5算法生成的密码串。

POP3协议的解析

对于自己开发pop3客户端程序,如何解析pop3所收到的源码信息是工作量很大而且极为关键的部分。

本人认为,解析pop3协议需要注意以下问题:

a)如何收取定位关键字段,并读取相应信息。 如Subject,boundary字段的寻找,和相应内容的存放

b)理解源码的基本格式。邮件的基本格式由MIME协议规定,可参看http://zh.wikipedia.org/wiki/MIME,或者Referrence/RFC2045.html。

c)如何设计数据结构存放相应信息。本人推荐将文本信息和附件信息统一成一种数据结构,按照类型来进行区分。

d)学习字符集和网络编码方式,邮件中相当多地方设计到

e)CRLF的理解。通常CRLF代表/r/n,在编程时每一个命令也是由此结束,但windows平台和linux平台中对CRLFx的定义不一样。

g)附件的接收和保存。特别是识别多附件时。

h)扩展性:为以后增加字符集和编码方式,以及html文档的支持等提供接口。

i)适应不同邮件服务器略有差别的邮件源码格式。相信这一点在解析时会让你爆血滴。关键