SMTP协议简介

本文说明:

SMTP相关了解,如有错误,麻烦指证,谢谢。更多信息请查看RFC2821。

 

基础知识:

SMTP(Simple Mail TransferProtocol)即简单邮件传输协议,它是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。smtp服务器是遵循smtp协议的发送邮件服务器,当接收时作为smtp服务端,当发送时做smtp客户端。SMTP是一个推协议,它不允许根据需要从远程服务器上“拉”来消息。如果客户使用邮件客户端收取邮件,需要使用POP3或IMAP协议,向邮件服务器拉取邮件数据,此时该服务器作为POP3或IMAP服务器。如下图所示:

 

 


说明:

1、上图读取邮件的箭头是指邮件的流向,该操作是由收件人主动发起的。

2、用户代理就是用户与电子邮件系统的接口,大多数情况下就是运行在用户PC机上的一个程序,如Foxmail。

3、发件人用户代理为何不直接将邮件发送给收件人的用户代理,而是通过邮件服务器来传输?

因为用户电脑、手机性能有限,无法运行收发邮件的程序,并且无法不间断地运行并连接到互联网上. 因此只能将信件暂时存放在邮件服务器中,用户需要时就可以去下载信件。

4、为什么用户收发邮件时感觉不到SMTP过程?

如果用户使用用户代理软件,则这个复杂的过程被用户代理屏蔽了,用户只需要进行简单的发送操作就可完成邮件的发送. 如果用户使用Web方式,则所有过程都由邮件服务器完成。

5、smtp一般不使用中间邮件服务器进行发送,如果接收方邮件服务器未准备好,发送方会保留邮件,稍后进行尝试。

 

SMTP简单通讯过程

通过telnet程序来测试一个SMTP服务器,并进行简单说明,如下所示:

$telnet smtp.example.com 25    < -------------------------   进行了tcp连接

220 smtp.example.com ESMTP Service(Lotus Domino Release 8.5.3FP6) ready a

t Thu, 23 Jul 2015 20:48:17 +0800

HELO zjf            <------------------------- HELO命令标记自己的身份

250 smtp.example.com Hello zjf([10.10.34.22]), pleased to meet you

auth login         <------------------------- 进行身份认证

334 VXNlcm5hbWU6

base64加密后的用户名

334 UGFzc3dvcmQ6

base64加密后的密码

235 Authentication successful

mail from:[email protected]        < ------------------------- 说明发件人邮箱

250 [email protected]... SenderOK

rcpt to:[email protected]    < ------------------------- (确认接收方是否已做好准备,防止邮件发送了,却发现无此人,或空间不足等造成资源浪费)

250 [email protected] OK

DATA         <------------------------- 表示开始传送邮件的内容

354 Please start mail input.

<邮件内容>

.        <------------------------- 两个回车换行中间用一个点隔开表示邮件内容结束

250 Mail queued for delivery.  <-------------------------  邮件放入了发送服务器队列

quit  <------------------------- 退出 

221 Closing connection. Good bye.


说明:

1、25端口是SMTP的标准服务端口,数据不经过加密处理,以明文方式发送。

当然也支持加密方式SSL/TLS,另有些发送邮箱服务器支持STARTTLS协议。下图是他们之间的区别(并没有详细描述中间的交互过程)



需要注意的是:

1)  不加密默认使用25端口;如明确使用SSL/TLS加密,则使用465端口

2)  在启用STARTTLS协议的时候,使用25端口较好,虽然587主要是针对STARTTLS协议的,但支持该协议的并不一定开放该端口,如网易邮箱。

3)  STARTTLS协议不是说只能用TLS加密,也可以使用SSL加密。


2、标识自己的身份

可通过HELO命令和EHLO命令标识自己的身份,两者的区别是:

HELO命令可以不进行身份认证(除非服务器要求);

EHLO命令则需要进行身份认证,并会返回更多的信息给客户端,如是否支持starttls协议。

如下面所示:

220 smtp.example.com ESMTP Service(Lotus Domino Release 8.5.3FP6) ready a

t Thu, 23 Jul 2015 15:58:58 +0800

EHLO zjf

250-smtp.example.com Hello zjf([10.10.34.22]), pleased to meet you

250-TLS

250-HELP

250-AUTH LOGIN

250-STARTTLS           < ------------------------- 说明支持starttls协议

250-SIZE 18432000

250 PIPELINING

 

可见要想知道一个邮件服务器是否支持ssl/tls、starttls,可通过telnet登入相应的端口号,和使用EHLO命令来查看。


参考资料:

1、《计算机网络》

2、百科

3、https://www.fastmail.com/help/technical/ssltlsstarttls.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章