电子邮件SMTP、POP3、IMAP协议学习

SMTP协议

1. SMTP协议简介

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

2. SMTP协议工作机制

SMTP通常有两种工作模式。发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX记录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此反复多次。当接收者收到全部邮件后会接收到特别的序列,入伏哦接收者成功处理了邮件,则返回OK应答。

3. SMTP服务器查找

SMTP服务器是基于域名服务DNS中计划收件人的域名来路由电子邮件。一般根据登陆邮箱的后缀域名通过DNS协议查找MX记录。

  1. 查找邮箱后缀域名的MX记录所指向的域名地址
  2. 根据指向域名地址通过dns查找域名地址指向的服务器ip
  3. tcp连接服务器ip:25(默认端口)(用来登陆或者发送)

4. SMTP基础协议实例

【c->s】telnet smtp.163.com 25【tcp连接】
【s->c】220 163.com Anti-spam GT for Coremail System (163com[20141201])【欢迎信息】
【c->s】helo 163.com【helo命令】
【s->c】250 OK
【c->s】auth login【请求登陆】
【s->c】334 dXNlcm5dhbWU6【要求用户名】
【c->s】Z3dfdsaffEDF=【输入base64用户名】
【s->c】334 UGFzc3ddvcmQ6【要求密码】
【c->s】fdasDSDFFFfDS=【输入base64密码】
【s->c】235 Authentication successful【登陆成功】
【c->s】mail from:xxx@163.com【发件地址】
【c->s】rcpt to:xxx@163.com【收件地址】
【c->s】DATA【data命令,要求发送内容】
【s->c】354 End data with .【提示信息,以.作为结束符号】
【c->s】from:gule11@163.com【要显示的发件地址】
【c->s】to:xxx@163.com【要显示的收件地址】
【c->s】hello world【内容】
【c->s】.【结束】
【s->c】250 Mail OK queued as smtp13,EcCowABHIv39riFXqUpKBA--.47592S3 1461825582【返回发送状态,我的测试不幸进入垃圾邮件】
【c->s】QUIT【退出命令】
【s->c】221 Bye

5. SMTP常用的命令

SMTP命令不区分大小写,但参数区分大小写。常用命令如下:

  • HELO ——向服务器标识用户身份发送者能欺骗、说谎,但一般情况下服务器都能检测到
  • RCPT TO: <forward-path> ——<forward-path>用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO
  • DATA ——将之后的数据作为数据发送,以.标志数据的结尾
  • REST ——重置会话,当前传输被取消
  • NOOP ——要求服务器返回OK应答,一般用作测试
  • QUIT ——结束会话
  • VRFY ——验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令
  • EXPN ——验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令
  • HELP ——查询服务器支持什么命令

6. SMTP常用的响应

501——参数格式错误
502——命令不可实现
503——错误的命令序列
504——命令参数不可实现
211——系统状态或系统帮助响应
214——帮助信息
220——服务器就绪
221——服务关闭
421——服务器未就绪,关闭传输信道
250——要求的邮件操作完成
251——用户非本地,将转发向<forward-path>
450——要求的邮件操作未完成,邮箱不可用
550——要求的邮件操作未完成,邮箱不可用
451——放弃要求的操作,处理过程中出错
551——用户非本地,请尝试<forward-path>
452——系统存储不足,要求的操作未执行
552——过量的存储分配,要求的操作未执行
553——邮箱名不可用,要求的操作未执行
354——开始邮件输入,以“.”结束
554——操作失败

7. 邮件服务器

开源邮件服务器

POP3协议

1. POP3协议简介

POP3称为邮局协议版本3(Post Office Protocol-Version 3),是TCP/IP协议族中的一员,由RFC1939 定义,主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3 使用 TCP 作为传输协议,端口号是110。
POP3协议相对简单,POP3服务器响应一般为:“+OK”表示成功,“-ERR”表示失败。

2. POP3基础协议实例

【c->s】telnet pop.163.com 110【tcp连接】
【s->c】+OK Welcome to coremail Mail Pop3 Server (163coms[726cd8【欢迎信息】
【c->s】user xxx@163.com【登陆】
【s->c】+OK core mail
【c->s】pass password【密码】
【s->c】+OK 1025 message(s) [125726173 byte(s)]
【c->s】list【列出邮件】
【s->c】1023 15552【邮件id 邮件大小】
【s->c】1024 24905
【s->c】1025 5288
【s->c】.【列出邮件结束】
【c->s】tetr 1025【收取一封邮件内容】
【s->c】邮件内容
【c->s】quit【退出】
【s->c】+OK core mail

3. POP3常用的命令

  • USER [username] 处理用户名
  • PASS [password] 处理用户密码
  • APOP [Name,Digest] 认可Digest是MD5消息摘要
  • STAT 处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
  • UIDL [邮件id] 处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
  • LIST [邮件id] 处理返回邮件数量和每个邮件的大小
  • RETR [邮件id] 处理返回由参数标识的邮件的全部文本
  • DELE [邮件id] 处理服务器将由参数标识的邮件标记为删除,最后由【quit】命令执行
  • RSET 处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
  • TOP [邮件id n] 处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
  • NOOP 处理服务器返回一个肯定的响应
  • QUIT 终止会话

IMAP协议

1. pop3协议的不足

POP作为Internet上邮件的第一个离线协议标准,允许用户从服务器上把邮件下载到本地主机上,同时删除保存在邮件服务器上的邮件【现在的邮件服务商都可以设置是否同时删除】,从而使用户不必长时间地与邮件服务器连接,很大程度上减少了服务器和网络的整体开销。

但POP3有其天生的缺陷,即当用户接收电子邮件时,所有的信件都从服务器上清除并下载到客户机。在整个收信过程中,用户无法知道邮件的具体信息,只有照单全收入硬盘后,才能慢慢浏览和删除。这使用户几乎没有对邮件接收的控制决定权。一旦碰上邮箱被轰炸,或有比较大的邮件,用户不能通过分析邮件的内容及发信人地址来决定是否下载或删除,从而造成系统资源的浪费。而IMAP协议不但可以克服POP3的缺陷,而且还提供了更强大的功能。

2. IMAP协议简介

IMAP:是Internet Mail Access Protocol交互式邮件存取协议的简称。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

与POP3协议类似,IMAP(Internet消息访问协议)也是提供面向用户的邮件收取服务。常用的版本是IMAP4。IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱,它除了支持POP3协议的脱机操作模式外,还支持联机操作和断连接操作。它为用户提供了有选择的从邮件服务器接收邮件的功能、基于服务器的信息处理功能和共享信箱功能。

IMAP4的脱机模式不同于POP3,它不会自动删除在邮件服务器上已取出的邮件,其联机模式和断连接模式也是将邮件服务器作为“远程文件服务器”进行访问,更加灵活方便。

其实说个简单的,就是如果你不对客户端做一个特殊设置的话,默认情况下,你使用POP3协议下载邮件,会把服务器上的所有邮件下载到客户端,而服务器上将不再存储。而IMAP在默认情况下,下载但是不删除邮件服务器上的文件。

标签: smtp, pop3, imap

仅有一条评论

  1. Very good postings. Thank you!

添加新评论