博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SMTP(Simple Mail Transfer Protocol, 简单邮件传输协议)简介
阅读量:4186 次
发布时间:2019-05-26

本文共 2185 字,大约阅读时间需要 7 分钟。

1、简介

      SMTP目前已是事实上的在Internet传输E-Mail的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确定是存在的),然后消息文本就传输了。可以很简单地通过Telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。

      在八十年代早期SMTP开始被广泛地使用。当时,它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反,SMTP在发送和接收的机器始终连接在网络的情况下工作得最好。

      由于这个协议开始是基于纯ASCII文本的,它在二进制文件上处理得并不好。诸如MIME的标准被开发来编码二进制文件以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。
      SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。
      Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP实现为一个客户端(消息的发送者)或一个服务器(消息的接收者)。一些其他的流行的SMTP服务器程序包括了Philip Hazel的exim,IBM的Postfix, D. J. Bernstein的Qmail,以及Microsoft Exchange Server。

      SMTP协议最早在RFC 821(1982年)中定义,最后更新是在RFC 5321(2008年)中,更新中包含了扩展SMTP(ESMTP)。

2、SMTP命令

      SMTP命令是发送于SMTP主机之间的ASCⅡ信息,可能使用到的命令如下表所示。

      SMTP协议命令
      命令                                                  描述
      DATA                                          开始信息写作
      EXPN<string>                         验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
      HELO<domain>                     向服务器标识用户身份,返回邮件服务器身份
      HELP<command>                 查询服务器支持什么命令,返回命令中的信息
      MAIL FROM<host>                  在主机上初始化一个邮件会话
      NOOP                                       无操作,服务器应响应OK
      QUIT                                         终止邮件会话
      RCPT TO<user>                     标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:
      RSET                                        重置会话,当前传输被取消
      SAML FROM<host>                发送邮件到用户终端和邮箱
      SEND FROM<host>               发送邮件到用户终端
      SOML FROM<host>                发送邮件到用户终端或邮箱
      TURN                                        接收端和发送端交换角色
      VRFY<user>                             用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

3、SMTP工作原理

     SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器:二是从某一个服务器传输到另一个服务器。SMTP也是个请求/响应协议,命令和响应都是基于ASCⅡ文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码。SMTP在TCP协议25号端口监听连续请求。

3.1 smtp连接和发送过程

     (1)建立TCP 连接。
     (2)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接收。
     (3)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件。
     (4)协商结束,发送邮件,用命令DATA发送。
     (5)以“.”号表示结束输入内容一起发送出去,结束此次发送,用QUIT命令退出。
     SMTP协议的邮件路由过程及个人SMTP邮件服务器简单配置

3.2 SMTP协议的邮件路由过程

     SMTP服务器基于域名服务DNS中计划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件都应向该主机发送。若SMTP服务器 mail.abc.com 收到一封信要发到shuer@sh.abc.com,则执行以下过程:
     (1)Sendmail 请求DNS给出主机sh.abc.com的CNAME 记录,如有,假若CNAME(别名记录)到shmail.abc.com,则再次请求shmail.abc.com的CNAME记录,直到没有为止。
     (2)假定被CNAME到shmail.abc.com,然后sendmail请求@abc.com 域的DNS给出shmail.abc.com的MX记录(邮件路由及记录),shmail MX 5 shmail.abc.com 10 shmail2.abc.com。
     (3)Sendmail组合请求DNS给出shmail.abc.com的A记录(主机名(或域名)对应的IP地址记录),即IP地址,若返回值为1.2.3.4(假设值)。
     (4)Sendmail与1.2.3.4连接,传送这封给shuser@sh.abc.com 的信到1.2.3.4 这台服务器的SMTP后台程序。

参考文献:百度百科和维基百科

转载地址:http://fwcoi.baihongyu.com/

你可能感兴趣的文章
verilog 基础原理1 - RTL中对数据位宽的管理
查看>>
Cadence IUS 之二: 生成波形
查看>>
DDR3基本概念2 - 上电复位时序
查看>>
DDR3基本概念3 - 复位初始化实战举例Lattice DDR3 IP仿真
查看>>
Lattice clarity designer在linux平台下无法找到已安装的IP的解决办法
查看>>
DDR3基本概念4 - 预充电和刷新,以及Lattice DDR3 SDRAM controller实战注意事项
查看>>
DDR3基本概念5 - DDR仿真中出现的Memory overflow错误的处理
查看>>
DDR3基本概念6 - Write leveling(写入均衡)
查看>>
DDR3基本概念7 - 写操作,以及Lattice DDR3 SDRAM controller实战
查看>>
verilog 基础原理1 - Testbench的initial中的时间节点的判断
查看>>
Cadence IUS 之三:代码覆盖率分析
查看>>
Lattice FPGA 使用指南3 - 如何用第三方仿真工具跑后仿及波形分析
查看>>
Cadence IUS 之四:生成verdi的fsdb波形时的问题分析
查看>>
Lattice FPGA 使用指南4 - 全局复位网络GSR的使用
查看>>
DDR3基本概念8 - 如何理解RTT和VTT
查看>>
DDR3基本概念9 - 8n pre-fetch architecture的含义
查看>>
DDR3基本概念10 - DDR MT/S的理解
查看>>
git命令缩写配置
查看>>
makefile常见问题
查看>>
ncverilog编译时Unrecognized system task or function: $fsdbDumpfile问题的解决方法
查看>>