当前位置:文档之家› POP3与SMTP协议

POP3与SMTP协议

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 110 (用telnet方式连接163的pop3服务器,pop3协定端口为110)S: Trying 202.108.5.100...Connected to .Escape character is '^]'.+OK Welcome to coremail Mail Pop3 Server(163coms[3d8c1fa079729fb6acc588e66d30360es])(服务器通常开头返回+OK表示正确的回应,+ERR表示所发命令有误)C: USER ***** (***处输入你的邮件用户名)S: +OK core mail (表示接受)C: PASS ***** (***处输入密码,这里都是明文显示)S: +OK 5 message(s) [9782 byte(s)] (这里表示服务器接受该帐户,服务器上对应有5封邮件,总大小9782个字节)C:LIST (LIST 命令列出每一封邮件的信息,己每封邮件对应的ID 号和大小)S: +OK 5 97821 12982 13113 12244 13125 4637.C: TOP 1 0 (格式 TOP num 0, num代表邮件ID号,返回该邮件的头部信息)S:+OK 1298 octets (服务器接受)Received: from (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@To: tommy_mail<tommy_mail@>Subject: @@!$$%^&MIME-Version: 1.0Content-Type: multipart/alternative; boundary="=-plenware_alt_"X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUUYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUUjlxYjsxI4VWxJwAYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1I0E4x80FVCIwcAKzIAtM7C26IkvcIIF6IxKo4kEV4yl1IIY67AEw4v_Jr0_Jr4l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8JVWxJwACY4xI67k04243AVAKzVAKj4xxM4xvF2IEb7IF0Fy26I8I3I1lFVAaXTZC67ZELSn0mTvEwaV2v3VFvVW8M4IE42xK82IY64kIx2x0424lw4CEF2IF47xS0VAv8wAKzVCY07xG64k0F24l7I0Y64k_MxkFs20EY4vE77kJMxkIecxEwVAFwVW8XwCY0x0Ix7I2Y4AK64vIr41l4x8a6c8ajcxJMI8E67AF67kF1VAFwI0_Jr0_JrylIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8Jr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjxUyYZXDUUUUMessage-Id: <48F2CB12.33901D.26072@>.C: RETR 2 (格式 RETR num, num为邮件ID号,返回邮件全部源码)S: +OK 1311 octetsReceived: from (unknown [221.10.25.6])by smtp4 (Coremail) with SMTP id DtGowLCrK4xUyvJIJeKfLg==.58545S2;Mon, 13 Oct 2008 12:11:00 +0800 (CST)......--=-plenware_alt_--.C: NOOP (空操作,起延时作用,服务器会在一定时间内无操作的话自动退出)S: +OK core mailC: UIDL (邮件的唯一ID,通常称“独立-ID表”,用于唯一确定一封邮件,通常用于客户端判别已读未读)S: +OK 5 97821 1tbiYAaMeEJw1XtwEgAAss (由服务器产生的邮件唯一ID,RFC文档上说是服务器内唯一,但估计说成全球唯一也不为过)2 1tbiYAeMeEJw1XtoyQAAsu3 1tbiYRaMeEJw2LVItgAAsi4 1tbiwQqMeEij15ERZQAAsm5 1tbiwReMeEij15EzUgAAsu.C: QUIT (退出命令)S: +OK core mailConnection closed by foreign host.-------------------------------------------------------------------------------------------------------------------------*更加详细的关于telnet的描述可参看 Reference/telnet 操作 smtp pop.htmlPOP3协议的状态和相关命令POP3有三种状态:a) The AUTHORIZATION State当一个TCP连接从客户端连接到服务器以后,就进入了这个状态。

通过常服务器会返回以下类似的信息:S: +OK POP3 server ready退出这个状态使用命令[QUIT] Command .....................退出与POP3服务器的连接b) The TRANSACTION State当用户成功连接并登录到邮件服务器后,就进入了TRANSACTION状态。

这个状态下可以使用的命令有:[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协议规定,可参看/wiki/MIME,或者Referrence/RFC2045.html。

c)如何设计数据结构存放相应信息。

本人推荐将文本信息和附件信息统一成一种数据结构,按照类型来进行区分。

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

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

g)附件的接收和保存。

特别是识别多附件时。

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

i)适应不同邮件服务器略有差别的邮件源码格式。

相信这一点在解析时会让你爆血滴。

关键还是在一个标准问题,可惜的是并没有一个标准规定了每一个字段的细到空格分号等的格式。

SMTP协议简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输email的标准。

SMTP是一个相对简单的基于文本的协议。

在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。

用telnet 连接SMTP服务器最直观的方式是用telnet连接到SMTP的服务器,看如何利用命令操作SMTP。

相关主题