SMTP协议浅析

2024-06-03 07:04
文章标签 协议 浅析 smtp

本文主要是介绍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<domain>——服务器就绪

221<domain>——服务关闭

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

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

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

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

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

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

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

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地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

这篇关于SMTP协议浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026283

相关文章

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请