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的连接和发送过程

(a)建立TCP连接

(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

         服务器端正希望以OK作为响应,表明准备接收

(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;

         服务器端则表示是否愿意为收件人接收邮件

(d)协商结束,发送邮件,用命令DATA发送

(e)以.表示结束输入内容一起发送出去

(f)结束此次发送,用QUIT命令退出

示例如下:

C: telent SMTP.163.com 25  //以telenet方式连接163邮件服务器
S: 220 163.com Anti-spam GT for Coremail System //220为响应数字,其后的为欢迎信息
C: HELO SMTP.163.com //除了HELO所具有的功能外,EHLO主要用来查询服务器支持的扩充功能 
S: 250-mail
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250 8BITMIME //最后一个响应数字应答码之后跟的是一个空格,而不是'-' 
C: AUTH LOGIN   //请求认证
S: 334 dxNlcm5hbWU6  //服务器的响应——经过base64编码了的“Username”=
C: Y29zdGFAYW1heGl0Lm5ldA==  //发送经过BASE64编码了的用户名
S: 334 UGFzc3dvcmQ6  //经过BASE64编码了的"Password:"=
C: MTk4MjIxNA==  //客户端发送的经过BASE64编码了的密码
S: 235 auth successfully  //认证成功 
C: MAIL FROM: bripengandre@163.com  //发送者邮箱
S: 250 … .  //“…”代表省略了一些可读信息
C: RCPT TO: bripengandre@smail.hust.edu.cn //接收者邮箱
S: 250 … .    // “…”代表省略了一些可读信息
C: DATA //请求发送数据
S: 354 Enter mail, end with "." on a line by itself
C: Enjoy Protocol Studing
C: .
S: 250 Message sent
C: QUIT //退出连接 
S: 221 Bye

其他命令:

VRFY——用于验证给定用户邮箱是否存在,以及接收关于该用户的详细信息;

EXPN——用于扩充邮件列表

4、邮件的路由过程

SMTP服务器是基于“域名服务DNS中计划收件人的域名来路由电子邮件”。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中的主机,属于该域的电子邮件都应向该主机发送。

若SMTP服务器mail.abc.com收到一封信要发送到shuser@sh.abc.com:

a: SendMail请求DNS给出主机sh.abc.com的CNAME记录,如有,假若CNAME到shmail.abc.com,则再次请求shmail.abc.com的CNAME记录,直到没有为止;

b: 假定被CNAME到shmail.abc.com,然后SendMail请求@abc.com域的DNS给出shmail.abc.com的MX记录,

    shmail MX 5 shmail.abc.com

    10 shmail2.abc.com

c: SendMail做好请求DNS给出shmail.abc.com的A记录,即IP地址,若返回值为1.2.3.4

d: SwndMail与1.2.3.4连接,传送这封信给shuser@sh.abc.com的信到1.2.3.4这台服务器的SMTP后台程序。

5、SMTP常用的命令

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

HELO <domain> <CRLF>——向服务器标识用户身份发送者能欺骗、说谎,但一般情况下服务器都能检测到

RCPT TO: <forward-path> <CRLF>——<forward-path>用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO

DATA <CRLF>——将之后的数据作为数据发送,以<CRLF>.<CRLF>标志数据的结尾

REST <CRLF>——重置会话,当前传输被取消

NOOP <CRLF>——要求服务器返回OK应答,一般用作测试

QUIT <CRLF>——结束会话

VRFY <string> <CRLF>——验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令

EXPN <string> <CRLF>——验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令

HELP <CRLF>——查询服务器支持什么命令

6、SMTP常用的响应

501——参数格式错误

502——命令不可实现

503——错误的命令序列

504——命令参数不可实现

211——系统状态或系统帮助响应

214——帮助信息

220<domain>——服务器就绪

221<domain>——服务关闭

421<domain>——服务器未就绪,关闭传输信道

250——要求的邮件操作完成

251——用户非本地,将转发向<forward-path>

450——要求的邮件操作未完成,邮箱不可用

550——要求的邮件操作未完成,邮箱不可用

451——放弃要求的操作,处理过程中出错

551——用户非本地,请尝试<forward-path>

452——系统存储不足,要求的操作未执行

552——过量的存储分配,要求的操作未执行

553——邮箱名不可用,要求的操作未执行

354——开始邮件输入,以“.”结束

554——操作失败

7、使用SMTP的必要性

一般的PC资源不够,处理能力不够,不可能全天候地连接在因特网上来收发邮件。所以使用SMTP服务器,可以让多个用户共用服务器,有效地降低了成本。

8、SMTP和邮件格式的关系

可以用一个比较形象的例子来说明:甲与乙书信来往,甲通过邮局向乙发送信件,邮局见转交邮件可看成使用了SMTP协议,至于书信的格式则会因为地区习惯等的不同而不同,这个书信格式可看成是邮件格式的标准。

9、浏览器发送邮件使用的协议

浏览器发送邮件的过程:

例如:bripengandre@126.com可通过登陆www.126.com来收发邮件

bripengandre@126.comwww.126.com提供的邮件页面上填写的相应信息(如发信人邮箱、收信人邮箱等),通过http协议被提交给126服务器;126服务器根据这些信息组装一封符合邮件规范的邮件(就像用户代理一样);然后smtp.126.com通过SMTP协议将这封邮件发送到接收端邮件服务器。

由此可知,浏览器发送邮件只是用户代理的功能直接放到邮件服务器上去做了,至于邮件服务器见发送邮件仍然采用的是SMTP协议。

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 19
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
目录 译者序 前言 第1章  概述 1.1  引言 1.2  分层 1.3  TCP/IP的分层 1.4  互联网的地址 1.5  域名系统 1.6  封装 1.7  分用 1.8  客户-服务器模型 1.9  端口号 1.10  标准化过程 1.11  RFC 1.12  标准的简单服务 1.13  互联网 1.14  实现 1.15  应用编程接口 1.16  测试网络 1.17  小结 第2章  链路层 2.1  引言 2.2  以太网和IEEE 802封装 2.3  尾部封装 2.4  SLIP:串行线路IP 2.5  压缩的SLIP 2.6  PPP:点对点协议 2.7  环回接口 2.8  最大传输单元MTU 2.9  路径MTU 2.10  串行线路吞吐量计算 2.11  小结 第3章  IP:网际协议 3.1  引言 3.2  IP首部 3.3  IP路由选择 3.4  子网寻址 3.5  子网掩码 3.6  特殊情况的IP地址 3.7  一个子网的例子 3.8  ifconfig命令 3.9  netstat命令 3.10  IP的未来 3.11  小结 第4章  ARP:地址解析协议 4.1  引言 4.2  一个例子 4.3  ARP高速缓存 4.4  ARP的分组格式 4.5  ARP举例 4.5.1  一般的例子 4.5.2  对不存在主机的ARP请求 4.5.3  ARP高速缓存超时设置 4.6  ARP代理 4.7  免费ARP 4.8  arp命令 4.9  小结 第5章  RARP:逆地址解析协议 5.1  引言 5.2  RARP的分组格式 5.3  RARP举例 5.4  RARP服务器的设计 5.4.1  作为用户进程的RARP服务器 5.4.2  每个网络有多个RARP服务器 5.5  小结 第6章  ICMP:Internet控制报文协议 6.1  引言 6.2  ICMP报文的类型 6.3  ICMP地址掩码请求与应答 6.4  ICMP时间戳请求与应答 6.4.1  举例 6.4.2  另一种方法 6.5  ICMP端口不可达差错 6.6  ICMP报文的4.4BSD处理 6.7  小结 第7章  Ping程序 7.1  引言 7.2  Ping程序 7.2.1  LAN输出 7.2.2  WAN输出 7.2.3  线路SLIP链接 7.2.4  拨号SLIP链路 7.3  IP记录路由选项 7.3.1  通常的例子 7.3.2  异常的输出 7.4  IP时间戳选项 7.5  小结 第8章  Traceroute程序 8.1  引言 8.2  Traceroute 程序的操作 8.3  局域网输出 8.4  广域网输出 8.5  IP源站选路选项 8.5.1  宽松的源站选路的traceroute 程序示例 8.5.2  严格的源站选路的traceroute 程序示例 8.5.3  宽松的源站选路traceroute程序 的往返路由 8.6  小结 第9章  IP选路 9.1  引言 9.2  选路的原理 9.2.1  简单路由表 9.2.2  初始化路由表 9.2.3  较复杂的路由表 9.2.4  没有到达目的地的路由 9.3  ICMP主机与网络不可达差错 9.4  转发或不转发 9.5  ICMP重定向差错 9.5.1  一个例子 9.5.2  更多的细节 9.6  ICMP路由器发现报文 9.6.1  路由器操作 9.6.2  主机操作 9.6.3  实现 9.7  小结 第10章  动态选路协议 10.1  引言 10.2  动态选路 10.3  Unix选路守护程序 10.4  RIP:选路信息协议 10.4.1  报文格式 10.4.2  正常运行 10.4.3  度量 10.4.4  问题 10.4.5  举例 10.4.6  另一个例子 10.5  RIP版本2 10.6  OSPF:开放最短路径优先 10.7  BGP:边界网关协议 10.8  CIDR:无类型域间选路 10.9  小结 第11章  UDP:用户数据报协议 11.1  引言 11.2  UDP首部 11.3  UDP检验和 11.3.1  tcpdump输出 11.3.2  一些统计结果 11.4  一个简单的例子 11.5  IP分片 11.6  ICMP不可达差错(需要分片) 11.7  用Traceroute确定路径MTU 11.8  采用UDP的路径MTU发现 11.9  UDP和ARP之间的交互作用 11.10  最大UDP数据报长度 11.11  ICMP源站抑制差错 11.12  UDP服务器的设计 11.12.1  客户IP地址及端口号 11.12.2  目标IP地址 11.12.3  UDP输入队列 11.12.4  限制本地IP地址 11.12.5  限制远端IP地址 11.12.6  每个端口有多个接收者 11.13  小结 第12章  广播和多播 12.1  引言 12.2  广播 12.2.1  受限的广播 12.2.2  指向网络的广播 12.2.3  指向子网的广播 12.2.4  指向所有子网的广播 12.3  广播的例子 12.4  多播 12.4.1  多播组地址 12.4.2  多播组地址到以太网地址的转换 12.4.3  FDDI和令牌环网络中的多播 12.5  小结 第13章  IGMP:Internet组管理协议 13.1  引言 13.2  IGMP报文 13.3  IGMP协议 13.3.1  加入一个多播组 13.3.2  IGMP报告和查询 13.3.3  实现细节 13.3.4  生存时间字段 13.3.5  所有主机组 13.4  一个例子 13.5  小结 第14章  DNS:域名系统 14.1  引言 14.2  DNS基础 14.3  DNS的报文格式 14.3.1  DNS查询报文中的问题部分 14.3.2  DNS响应报文中的资源记录部分 14.4  一个简单的例子 14.5  指针查询 14.5.1  举例 14.5.2  主机名检查 14.6  资源记录 14.7  高速缓存 14.8  用UDP还是用TCP 14.9  另一个例子 14.10  小结 第15章  TFTP:简单文件传送协议 15.1  引言 15.2  协议 15.3  一个例子 15.4  安全性 15.5  小结 第16章  BOOTP: 引导程序协议 16.1  引言 16.2  BOOTP的分组格式 16.3  一个例子 16.4  BOOTP服务器的设计 16.5  BOOTP穿越路由器 16.6  特定厂商信息 16.7  小结 第17章  TCP:传输控制协议 17.1  引言 17.2  TCP的服务 17.3  TCP的首部 17.4  小结 第18章  TCP连接的建立与终止 18.1  引言 18.2  连接的建立与终止 18.2.1  tcpdump的输出 18.2.2  时间系列 18.2.3  建立连接协议 18.2.4  连接终止协议 18.2.5  正常的tcpdump输出 18.3  连接建立的超时 18.3.1  第一次超时时间 18.3.2  服务类型字段 18.4  最大报文段长度 18.5  TCP的半关闭 18.6  TCP的状态变迁图 18.6.1  2MSL等待状态 18.6.2  平静时间的概念 18.6.3  FIN_WAIT_2状态 18.7  复位报文段 18.7.1  到不存在的端口的连接请求 18.7.2  异常终止一个连接 18.7.3  检测半打开连接 18.8  同时打开 18.9  同时关闭 18.10  TCP选项 18.11  TCP服务器的设计 18.11.1  TCP服务器端口号 18.11.2  限定的本地IP地址 18.11.3  限定的远端IP地址 18.11.4  呼入连接请求队列 18.12  小结 第19章  TCP的交互数据流 19.1  引言 19.2  交互式输入 19.3  经受时延的确认 19.4  Nagle算法 19.4.1  关闭Nagle算法 19.4.2  一个例子 19.5  窗口大小通告 19.6  小结 第20章  TCP的成块数据流 20.1  引言 20.2  正常数据流 20.3  滑动窗口 20.4  窗口大小 20.5  PUSH标志 20.6  慢启动 20.7  成块数据的吞吐量 20.7.1  带宽时延乘积 20.7.2  拥塞 20.8  紧急方式 20.9  小结 第21章  TCP的超时与重传 21.1  引言 21.2  超时与重传的简单例子 21.3  往返时间测量 21.4  往返时间RTT的例子 21.4.1  往返时间RTT的测量 21.4.2  RTT估计器的计算 21.4.3  慢启动 21.5  拥塞举例 21.6  拥塞避免算法 21.7  快速重传与快速恢复算法 21.8  拥塞举例(续) 21.9  按每条路由进行度量 21.10  ICMP的差错 21.11  重新分组 21.12  小结 第22章  TCP的坚持定时器 22.1  引言 22.2  一个例子 22.3  糊涂窗口综合症 22.4  小结 第23章  TCP的保活定时器 23.1  引言 23.2  描述 23.3  保活举例 23.3.1  另一端崩溃 23.3.2  另一端崩溃并重新启动 23.3.3  另一端不可达 23.4  小结 第24章  TCP的未来和性能 24.1  引言 24.2  路径MTU发现 24.2.1  一个例子 24.2.2  大分组还是小分组 24.3  长肥管道 24.4  窗口扩大选项 24.5  时间戳选项 24.6  PAWS:防止回绕的序号 24.7  T/TCP:为事务用的TCP扩展 24.8  TCP的性能 24.9  小结 第25章  SNMP:简单网络管理协议 25.1  引言 25.2  协议 25.3  管理信息结构 25.4  对象标识符 25.5  管理信息库介绍 25.6  实例标识 25.6.1  简单变量 25.6.2  表格 25.6.3  字典式排序 25.7  一些简单的例子 25.7.1  简单变量 25.7.2  get-next操作 25.7.3  表格的访问 25.8  管理信息库(续) 25.8.1  system组 25.8.2  interface组 25.8.3  at组 25.8.4  ip组 25.8.5  icmp组 25.8.6  tcp组 25.9  其他一些例子 25.9.1  接口MTU 25.9.2  路由表 25.10  trap 25.11  ASN.1和BER 25.12  SNMPv2 25.13  小结 第26章  Telnet和Rlogin:远程登录 26.1  引言 26.2  Rlogin协议 26.2.1  应用进程的启动 26.2.2  流量控制 26.2.3  客户的中断键 26.2.4  窗口大小的改变 26.2.5  服务器到客户的命令 26.2.6  客户到服务器的命令 26.2.7  客户的转义符 26.3  Rlogin的例子 26.3.1  初始的客户-服务器协议 26.3.2  客户中断键 26.4  Telnet协议 26.4.1  NVT ASCII 26.4.2  Telnet命令 26.4.3  选项协商 26.4.4  子选项协商 26.4.5  半双工、一次一字符、一次 一行或行方式 26.4.6  同步信号 26.4.7  客户的转义符 26.5  Telnet举例 26.5.1  单字符方式 26.5.2  行方式 26.5.3  一次一行方式(准行方式) 26.5.4  行方式:客户中断键 26.6  小结 第27章  FTP:文件传送协议 27.1  引言 27.2  FTP协议 27.2.1  数据表示 27.2.2  FTP命令 27.2.3  FTP应答 27.2.4  连接管理 27.3  FTP的例子 27.3.1  连接管理:临时数据端口 27.3.2  连接管理:默认数据端口 27.3.3  文本文件传输:NVT ASCII 表示还是图像表示 27.3.4  异常中止一个文件的传输: Telnet同步信号 27.3.5  匿名FTP 27.3.6  来自一个未知IP地址的匿名FTP 27.4  小结 第28章  SMTP:简单邮件传送协议 28.1  引言 28.2  SMTP协议 28.2.1  简单例子 28.2.2  SMTP命令 28.2.3  信封、首部和正文 28.2.4  中继代理 28.2.5  NVT ASCII 28.2.6  重试间隔 28.3  SMTP的例子 28.3.1  MX记录:主机非直接连到 Internet 28.3.2  MX记录:主机出故障 28.3.3  VRFY和EXPN命令 28.4  SMTP的未来 28.4.1  信封的变化:扩充的SMTP 28.4.2  首部变化:非ASCII字符 28.4.3  正文变化:通用Internet邮件 扩充 28.5  小结 第29章  网络文件系统 29.1  引言 29.2  Sun远程过程调用 29.3  XDR:外部数据表示 29.4  端口映射器 29.5  NFS协议 29.5.1  文件句柄 29.5.2  安装协议 29.5.3  NFS过程 29.5.4  UDP还是TCP 29.5.5  TCP上的NFS 29.6  NFS实例 29.6.1  简单的例子:读一个文件 29.6.2  简单的例子:创建一个目录 29.6.3  无状态 29.6.4  例子:服务器崩溃 29.6.5  等幂过程 29.7  第3版的NFS 29.8  小结 第30章  其他的TCP/IP应用程序 30.1  引言 30.2  Finger协议 30.3  Whois协议 30.4  Archie、WAIS、Gopher、Veronica 和WWW 30.4.1  Archie 30.4.2  WAIS 30.4.3  Gopher 30.4.4  Veronica 30.4.5  万维网WWW 30.5  X窗口系统 30.5.1  Xscope程序 30.5.2  LBX: 低带宽X 30.6  小结 附录A  tcpdump程序 附录B  计算机时钟 附录C  sock程序 附录D  部分习题的解答 附录E  配置选项 附录F  可以免费获得的源代码 参考文献 缩略语
SMTP协议(Simple Mail Transfer Protocol)和HTTP协议(Hypertext Transfer Protocol)是两种不同的协议,用于不同的应用场景,它们有以下主要区别: 1. 功能和应用场景: - SMTP协议SMTP协议用于电子邮件的传输,它负责将邮件从发送方传递到接收方的邮件服务器SMTP协议支持邮件的发送、转发和路由,用于不同邮件服务器之间的通信。 - HTTP协议:HTTP协议用于在客户端和服务器之间传输超文本和相关数据。HTTP协议广泛应用于Web浏览器和Web服务器之间的通信,支持客户端发送请求获取资源、服务器进行处理并返回响应等。 2. 通信方式: - SMTP协议SMTP协议使用可靠的TCP连接进行通信,确保邮件的可靠传输。 - HTTP协议:HTTP协议也使用TCP连接进行通信,但是它可以使用无连接的UDP进行传输。 3. 数据格式: - SMTP协议SMTP协议使用基于纯文本的数据格式,包括邮件头和邮件正文,使用特定的格式进行组织。 - HTTP协议:HTTP协议使用基于ASCII的文本格式,包括请求头、响应头和可选的请求体或响应体,也可以使用二进制数据。 4. 状态保持: - SMTP协议SMTP是一种无状态协议,每个请求-响应都是相互独立的,服务器不会保留之前请求的状态信息。 - HTTP协议:HTTP也是一种无状态协议,每个请求-响应之间是相互独立的,服务器不会保留客户端的状态信息。为了实现状态保持,HTTP引入了Cookie和Session机制。 5. 端口号: - SMTP协议SMTP默认使用端口号25进行通信。 - HTTP协议:HTTP默认使用端口号80进行通信,HTTPS使用端口号443。 总的来说,SMTP协议和HTTP协议是两种不同的协议,用于不同的应用场景。SMTP协议用于电子邮件的传输,而HTTP协议用于Web浏览器和Web服务器之间的通信。它们在功能、通信方式、数据格式、状态保持和端口号等方面都有明显的区别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caroline0071

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值