• SMTP协议浅析


    一、协议介绍

        邮件传输协议由SMTP(邮件发送协议)和POP3、IMAP(邮件读取协议)等协议组成,采用C/S(客户端/服务器)架构使用25端口监听TCP连接实现可靠通信,基本流程与邮政系统的寄信类似,具体的过程如下。

    1. 发件人将邮件发送到自己使用的邮件服务器。
    2. 发件人的邮件服务器将收到的邮件转发到收件人邮件服务器中的收件人邮箱。
    3. 收件人访问邮件服务器中自己的邮箱,获取发件人发送的电子邮件。
    4. 邮件发送流程如下图1.1所示。

    1>发件人需要将自己的邮件内容“推给”己方的SMTP服务器(类似于你去邮局寄信)。

    2>己方STMP服务器将邮件“推给”对方的SMTP服务器(类似于邮递员将你的邮局发送到对方分属的邮局)

    3>收件人从本地SMTP服务器侧 “拉回”发给自己的邮件(类似于收件人从邮局将自己的信件取回)。

    图1.1:邮件发送过程

    二、SMTP的基本工作原理

    SMTP基本的交互过程如图2.1所示.

    图2.1:SMTP基本交互过程

    三、以QQ邮箱为例的报文解析

    1、DNS解析

    (1)DNS解析是每次发送邮件必经的一个过程,先要在域名服务器处获取域名相关的IP地址。

    (2)域名服务器主要分为四种:本地域名服务器;根域名服务器;顶级域名服务器;权威域名服务器。

    (3)若本地域名服务器无相关域名的缓存IP,则向上级域名服务器寻求帮助。

    (4)如下图3.1所示,设备发起解析请求,需要先拿到域名对应的IP地址。

    图3.1:DNS解析

    2、三次握手

    (1)SMTP是以TCP为基础的可靠协议,在报文交互之前需要先进行三次握手。如下图3.2所示。

    (2)设备侧与DNS解析后拿到的地址(smtp.qq.com所属的IP地址)建立三次握手。为之后的邮件发送做准备。

    图3.2:三次握手

    3、建立连接阶段

    (1)接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421(服务器不可用)。

    (2)客户发送HELO报文,并使用它的域名地址标志自己。目的是要把客户的域名通知服务器。

    (3)服务器响应代码250(请求命令完成)或根据情况的其他一些代码

    (4)具体交互过程如下图3.3及图3.4所示。

    图3.3:建立连接

    图3.4:建立连接-流追踪

    4、认证阶段

    (1)设备侧发送请求认证AUTH LOGTH。

    (2)服务器侧回复334,表示认证服务已经就绪。

    (3)设备侧发送用户名User。

    (4)服务器侧回复334,表示收到用户名。

    (5)设备侧发送密码PASS。

    (6)服务器侧回复235表示认证通过。

    (7)具体交互过程如下图3.5及3.6所示。

    图3.5:认证阶段

    图3.6:认证阶段-流追踪

    5、邮件发送阶段

    (1)设备侧指定发件人邮箱。

    (2)服务器侧回复250OK表示收到。

    (3)设备侧指定发件人邮箱。

    (4)服务器侧回复250OK表示收到。

    (5)设备侧表示准备发送数据。

    (6)服务器回复354提示发送‘.’表示邮件结束。

    (7)设备侧发送邮件数据。

    (8)服务器侧回复250OK表示已经发送。

    (9)具体交互过程如下图3.7及图3.8所示。

    图3.7:邮件发送阶段

    图3.8:邮件发送阶段-流追踪

    5、退出阶段

    (1)设备侧回复QUIT表示退出。

    (2)服务器侧发送221表示知晓。

    (3)具体交互过程如下图3.9及图3.10所示。

    图3.9:退出阶段

    图3.10:退出阶段-流追踪

    6、四次挥手

    (1)SMTP是以TCP为基础的可靠协议,在报文交互结束后需要进行四次挥手断开连接,释放服务资源。

    图3.11:四次挥手

    四、附录

    1、如何开启第三方客户端登录服务

    (1)邮箱需要开启第三方客户端登录服务(如下以QQ邮箱为例)

    第一步:登录 QQ 邮箱;

    第二步:点击进入设置——账户界面,如图 4.1 所示;

    第三步:分别开通 1、2、3、4 处所对应的服务;

    第四步:点击 5 处,生成授权码;

    图4.1:QQ邮箱开启第三方登录服务

    2、SMTP常见响应码

    501——参数格式错误

    502——命令不可实现

    503——错误的命令序列

    504——命令参数不可实现

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

    214——帮助信息

    220——服务器就绪

    221——服务关闭

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

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

    251——用户非本地,将转发向

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

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

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

    551——用户非本地,请尝试

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

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

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

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

    554——操作失败

    响应码用三位数字编码表示。第一个数字给出了命令状态的一般性指示,比如响应成功、失败或不完整。总共有五种不同的状态:

    1 表示服务器正确接收信息,还未处理,需要一个确认的信息。

    2 表示服务器已经正确处理信息。

    3 表示服务器正确接收信息,正在处理,需要进一步的信息完成该请求。

    4 表示信息临时错误(比如系统繁忙),过一会再重试即可。

    5 表示信息永久错误,相关的请求无法完成。

    第二个数字是响应类型的分类,会提供进一步的信息:

    0 表示语法。

    1 表示系统状态和信息。

    2 表示连接状态。

    3 表示与用户认证有关的信息。

    4 表示未定义。

    5 表示与文件系统有关的信息。

    第三个数字提供了更加详细的信息。

    3、DNS解析流程

    DNS解析的基本过程如下图4.1所示。

    https://images2015.cnblogs.com/blog/464291/201707/464291-20170703113844956-354755333.jpg

    图4.1 DNS解析过程

    (1)网络客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般是你设备填写的DNS地址。

    (2)查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询

    (3)根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。

    (4)本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

    (5)最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

  • 相关阅读:
    链表| leecode刷题笔记
    可视化大屏设计模板 | 主题皮肤(报表UI设计)
    RabbitMQ(15672) 消息中间件 NOTE
    drools动态规则之Maven解析
    百度小程序制作源码 百度引流做关键词排名之技巧
    使用微信公众号搭建免费查券返利机器人来赚佣金详细教程分享
    openCV第三篇
    每月固定日期提醒app用哪个?手机上可固定日期提醒的工具选择哪一个
    编写云计算计费系统
    1、pinpoint-简介
  • 原文地址:https://blog.csdn.net/qq_39965491/article/details/139390248