应用层——电子邮件(SMTP、POP3、IMAP)

news2024/11/23 6:49:06

目录

1. 电子邮件系统及组成结构

1.1 电子邮件 

1.2 电子邮件系统的组件 

2. SMTP(邮件发送协议)

2.1 SMTP的特征 

2.2 SMTP的基本操作 

2.3 SMTP协议的基本流程

2.4 SMTP交互与应答

2.5 SMTP与HTTP的对比 

3. 邮件报文格式与MIME

3.1 电子邮件格式 

3.2 多用途网际邮件扩充-MIME

4. 邮件访问协议

4.1 POP3

4.2 IMAP 

4.3 基于Web的电子邮件 


1. 电子邮件系统及组成结构

1.1 电子邮件 

电子邮件自因特网诞生以来已经成为最为流行的应用程序,时至今日,仍然是最为重要和实用的互联网应用之一

与普通邮件一样,电子邮件是一种异步通信方式,不像电话等通信方式必须通信双方同时在场,发送方可以在任意时间发送邮件,接收方也可以在任意时间接收邮件

9a12410c9626890cbcb9b373ca20fdb2.png

电子邮件较普通邮件更为快速而且易于分发,价格便宜。现代电子邮件具有许多强大的特性,包括具有附件、超链接、HTML格式文本和图片的报文 

1.2 电子邮件系统的组件 

一个电子邮件系统的组成构件

fb569ca2ac194a5184e43dc8acad019c.png

主要有三个组成部分:

  • 用户代理(user agents,UA)
  • 邮件服务器(mail servers)
  • 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)

电子邮箱的工作方式和寄快递类似

  1. 首先找一个跑腿小哥(相当于用户代理)帮你去寄东西,你要先把发件人收件人信息填好(邮箱地址)
  2. 跑腿小哥将你的东西拿到寄件处(邮件服务器)准备邮寄
  3. 寄件处帮你把物品寄出去,通过物流(相当于传输协议)运往目的地
  4. 物品到达收件人的寄件处(对方的邮件服务器)
  5. 收件人也叫了一个跑腿小哥(对方的用户代理)将东西取回来

用户代理:用户和电子邮件系统的接口

用户代理简单来说就是一个程序,如QQ邮箱、Outlook等。通常具有撰写、显示和处理邮件的功能

邮件服务器:用于发送和接受邮件,先发信人报告邮件传送的情况 ,一个邮件服务器可能有多个代理

是电子邮件体系结构的核心。它采用C/S结构, 但它必须要能够同时充当服务器和客户端

邮件服务器有两个功能:

  • 邮箱:存储发给该用户的Email 
  • 消息队列(message queue):存储等待发送的Email

简单邮件传输协议:用于完成邮件在邮件服务器之间的传输

SMTP是因特网电子邮件中主要的应用层协议,邮件服务器之间传递消息所使用的协议

145ed093f04b4a73b10b328327bdf78c.png

一个典型的邮件发送的例子是:

  • 发送方通过用户代理将邮件传输到A用户的邮件服务器
  • 由A的邮件服务器传输到B的邮件服务器
  • 然后该邮件被分发到接受方的邮箱中

通常,如果发送方的服务器不能完成邮件的传输,那么邮件就在发送方的邮件服务器的消息队列中排队,一段时间后(一般是30分钟)再尝试发送

2. SMTP(邮件发送协议)

2.1 SMTP的特征 

SMTP协议定义在[RFC 5321]中,用于从发送方的邮件服务器发送报文到接受发的邮件服务器,它最典型的特征有:

  • 使用TCP进行email消息的可靠传输
  • 端口25
  • 传输过程的三个阶段——握手、消息传输、关闭
  • Email消息只能包含7位ASCII码
  • 使用命令/响应交互模式
    命令(command): ASCII文本
    响应(response): 状态代码和语句

2.2 SMTP的基本操作 

举一个例子来描述SMTP的基本操作,假设左边的用户是Alice,右边的用户是Bob:

5719ecc9bdc1471d952e46e4fdb4a958.png

  1. Alice首先通过她的用户代理写了一封邮件,并且在邮件中填上Bob的邮件地址
  2. 然后这封邮件被用户代理发送到Alice的邮件服务器上,这一过程中这封邮件需要在服务器中排队
  3. Alice邮件服务器上的SMTP客户端在报文队列中发现有邮件要发送,与Bob的邮件服务器建立一条TCP连接
  4. 经过一些SMTP握手后,SMTP客户端通过该TCP连接发送邮件
  5. 邮件被传送到Bob的邮件服务器上
  6. Bob随时可以来读取邮件

值得注意的是:

SMTP一般不使用中间邮件服务器发送邮件,也就是说即使邮件的发送者和接收者相距再远,中间所隔的网络再复杂,SMTP也总是倾向于建立起一条直连发送方和接受方的TCP连接

2.3 SMTP协议的基本流程

SMTP将一个报文从发送邮件服务器传送到接收邮件服务器的过程:

1️⃣ 客户SMTP(运行在发送邮件服务器主机上)在25号端口,建立一个到服务器SMTP(运行在接受邮件服务器主机上)的TCP连接

c71b7e2454dead9e6c79acef11733b8f.png

2️⃣ SMTP的客户和服务器在传输信息前要向对方“打招呼并先介绍自己”,在SMTP的握手阶段,SMTP客户指示发送方的邮件地址和接受发的邮件地址SMTP的客户和服务器彼此介绍后,客户发送报文

76dc4cd76d7121264c5e6a01e74d699f.png

3️⃣ 如果SMTP客户还有别的邮件要发送到这台服务器,就继续发送,否则关闭TCP连接

2.4 SMTP交互与应答

SMTP交互与应答整体过程 

5e828cd628871493519ba675a7cf721c.png

💠 首先,当TCP连接建立后,最开始由接受方邮件服务器进行交互,发送一条服务就绪应答给客户邮件服务器,应答代码为220

f7cbf1d6b7a1c72948d774f65cc68900.png

💠 SMTP客户收到该应答后,以HELO(HELLO的缩写)进行应答,同时带上自己的域名

7e0ed5fc49b5b5882b78969c9d03f993.gif

💠 SMTP服务器若认为身份有效,则发回应答代码:250

e962233c90134201294572dde0b5ae21.gif

💠 SMTP客户收到该应答后,使用命令 MAIL FROM 来告诉服务器该邮件来自何方,用MAIL FROM指明发件人邮箱地址

6d764c499042daa345ea60d0113d7f2e.gif

💠 服务器认为命令合理,则发回应答代码:250

8471ca1506252d3613905863c6487c51.gif

💠 SMTP客户收到该应答后,使用命令 RCPT TO 告诉服务器邮件去往何地,也就是收件人邮箱

af3ac6e3b6801aaa8d0017a0e4563403.gif

💠 服务器中若有该收件人邮箱(确认是否存在代理),则发回应答代码250

1444b729b18e5acccc57153be9b77231.gif

💠 SMTP客户收到该应答后,使用 DATA 命令来告诉服务器自己准备发送邮件内容了

bdda090e2e47cccc8ff897cd238bdbb1.gif

 💠 SMTP服务器准备对该邮件进行接受,发回应代码:354

37c6cd69400e17ea4229ffb1c8e5ef35.gif

💠 SMTP客户收到该应答,发送邮件

3c799e6fa6bf541c6f657133dc55e747.gif

💠 最后发送结束符CRLF.CRLF来结束邮件的发送

c143cf1d9f3c2c1afd2726d3fc9693e5.gif

💠 服务器成功收到邮件,应答:250

3be2d9c5dcd4e6cff03b69530261cb95.gif

💠 SMTP客户收到该应答后,使用命令 QUIT 向服务器请求断开连接

4832ab599f6c4d8cdcfbc8c58c81da5b.gif

💠服务器发回应答代码 221表示接受请求并主动断开连接

194d54c4b4e1d1fa073890c786fc65ab.png

下面给出一个SMTP客户(以C代表)和一个SMTP服务器(以S代表)之间交换报文文本的例子

S: 220 hamburger.edu                                          (服务就绪应答)
C: HELO crepes.fr                                                (客户收到应答,打招呼并给出自己的域名)
S: 250 Hello crepes.fr, pleased to meet you         (域名有效,问好)
C: MAIL FROM: <alice@crepes.fr>                      (给出发件人邮箱地址)
S: 250 alice@crepes.fr ... Sender ok                    (发件人合理,给出应答)
C: RCPT TO: <bob@hamburger.edu>                  (给出收件人邮箱地址)
S: 250 bob@hamburger.edu ... Recipient ok        (收件人合理,给出应答)
C: DATA                                                                 (客户即将发送数据)
S: 354 Enter mail, end with “.” on a line by itself   (服务器准备接受)
C: Do you like ketchup?                                         (邮件内容)
C: How about pickles?                                           (...)
C: .                                                                         (邮件结束)
S: 250 Message accepted for delivery                   (服务器成功收到邮件)
C: QUIT                                                                  (客户即将断开连接)
S: 221 hamburger.edu closing connection             (服务器断开连接)

2.5 SMTP与HTTP的对比 

SMTPHTTP
连接方式持续连接持续连接
获取信息方式推式(PUSH)拉式(PULL)
交互模式命令/响应命令/响应
命令和状态码ASCII码ASCII码
对象的封装多个对象在由多个
部分构成的消息中发送
每个对象封装在独
立的响应消息中

3. 邮件报文格式与MIME

3.1 电子邮件格式 

一个电子邮件分为信封内容两大部分,邮件内容又分为首部主体两部分

  • [RFC 5322]规定了邮件的首部格式,用户要按照格式填写首部内容
  • 主体部分由用户自由撰写(邮件正文)
  • 信封无需用户填写,邮件系统自动从用户填写的首部中提取所需信息并写在信封上

一个典型的邮件内容首部如下

From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life. 

邮件内容的首部包含一些首部行,格式为 [关键字 :值],有些关键字是必须的,有些是可选的。最重要的是To:和Subject:

  • To是必需的关键字,后面填入一个或多个收件人的邮件地址,电子邮件地址的规定格式为:收件人邮箱名@邮箱所在主机的域名,如abc@mail.com,其中收件人邮箱名即用户名,abc在mail.com这个邮件服务器上必须是唯一的
  • Subject是可选关键字,是邮件的主题,反应了邮件的主要内容
  • From也是必需的关键字,但它由邮件系统自动填入

d56ed02cbda74533a1fc452f8ec2f6c6.png

首部和报文主体之间由空行进行分隔,报文主体以ASCII格式表示 

3.2 多用途网际邮件扩充-MIME

MIME-多用途网际邮件扩充(Multipurpose Internet Mail Extensions)定义在[RFC 2045, 2056],用于解决SMTP只能传输7位ASCII码的问题

SMTP只能传输一定长度的ASCII码邮件,对于其他国家的文字、二进制文件和可执行文件都无法传送,MIME就是对SMTP的一种扩展,它并没有改变SMTP或取而代之,相反它继续使用SMTP的格式,但增加了邮件的主体结构,并定义了传送非ASCII码的编码规则

MIME通过在邮件首部增加额外的行以声明MIME的内容类型

e7037fc8cc9745908020c2b40f1c4698.png

MIME主要包括以下三部分内容

  • 5个新的邮件首部字段——MIME版本、内容描述、内容标识、传送编码和内容类型
  • 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
  • 定义了传输编码,可对任何内容格式进行转换,而不会被邮件系统改变

MIME是工作在SMTP之上的,对于非ASCII码的内容,先通过MIME以一定编码规则转化成ASCII码,再交由SMTP传送,在接受端的MIME中被还原

d1942332018c9c417110c3877b325145.png

实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的HTTP

4. 邮件访问协议

SMTP完成的是发送方的用户代理→发送方邮件服务器,发送方邮件服务器到接受方邮件服务器之间的传送,接受方用户从自己的邮件服务器中将邮件取回本地则使用邮件访问协议

2acfbb65deeb44438a5ffde164c7cfb5.png

4.1 POP3

邮局协议(Post Office Protocol, POP)是一个非常简单但功能有限的邮件读取协议,由[RFC 1939]定义,现在使用的是它的第三个版本POP3

当用户代理(客户)打开一个到邮件服务器端口110上的TCP连接后,POP3就开始工作了,分为三个阶段

  1. 特许( authorization ):用户代理以明文形式发送用户名和口令以鉴别用户(我理解为输入用户名和密码进行登录)
  2. 事务处理( transaction ):用户从邮件服务器取回报文
  3. 更新( update ):出现在客户发出quit命令之后,目的是结束POP3会话并删除一删除标记的邮件

f000989b26b14df58d6323bf80d22aa2.png

POP3的主要特征

  • 采用"PULL"拉式进行通信,拉取用户邮箱中的邮件
  • 使用C/S结构,在传输层使用TCP,端口号为110
  • POP3是无状态的
  • 有两种工作方式 —— “下载并保留” 和 “下载并删除”

下载并删除:用户如果换了客户端软件,无法重读该邮件

下载并保留:不同客户端都可以保留消息的拷贝 

但正是由于POP3的简单性,使得它无法完成更多功能,如不允许用户在邮件服务器上管理自己的邮件(例如创建文件夹,对邮件进行分类管理等)

4.2 IMAP 

因特网报文存取协议(Internet Message Access Protocol, IMAP),由[RFC 3501]定义,主要解决了POP3无法为用户提供在远程服务器管理邮件服务的问题

IMAP与POP3有许多相似的地方,例如它们都使用TCP连接,都使用客户-服务器结构,但IMAP比POP3复杂得多,因此功能也更强大,它为用户提供了创建文件夹、在不同文件夹之间移动邮件以及在远程文件夹中查询邮件等联机命令,为此IMAP服务器维护了会话用户的状态信息

IMAP的另一特性是允许用户代理只获取报文的某些部分,例如可以指读取一个报文首部,或多部分MIME报文的一部分,这尤其适用于低带宽的情况

IMAP的主要特点有

  • 所有消息统一保存在一个地方:服务器
  • 允许用户利用文件夹组织消息
  • 支持跨会话(Session)的用户状态:文件夹名字,文件夹与消息ID之间的映射 

4.3 基于Web的电子邮件 

随着万维网的流行,目前出现了许多基于万维网的电子邮件,如Hotmail、Gmail等

使用这种电子邮件相较于前面所说的有两种改变

  • 用户代理由邮件客户端程序变成了普通的浏览器
  • 用户和本地邮箱服务器之间的通信通过HTTP进行

发送方的用户代理(浏览器)将邮件传送到发送方的邮件服务器时,使用的是HTTP而非SMTP;接受发从接受发的邮件服务器将邮件读取到本地也使用HTTP而非POP3或IMAP,但在邮箱服务器与邮箱服务器之间进行的传送,总是使用SMTP

c7d304b79b3e2280f6a28bc02e0bb82c.png

最终,我们所得到的电子邮件传送过程可表示为

bf7a6c51e3414bfca680321d3fb2c32c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32时钟系统原理和作用

时钟对于单片机来讲类似于心脏对于人体&#xff0c;单片机通过时钟信号控制单片机工作。 1.时钟系统工作流程 时钟源输入----被分频或倍频----输出至系统/外设/外部接口 2.时钟分类 RC时钟精度低&#xff0c;体积小&#xff0c; OSC时钟精度高&#xff0c;体积大。 3.部分…

5.多层感知机

5.多层感知机 目录 感知机 基本内容训练感知机感知机存在的问题总结 多层感知机 隐藏层 单隐藏层-单分类 激活函数 ReLU函数sigmoid函数tanh函数总结 多类分类 多层感知机的从零开始实现 初始化模型参数激活函数模型损失函数训练 多层感知机的简洁实现 模型模型选择、欠拟合和…

⭐基于unity物体移动的方法API的总结-GIF图文详解⭐

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 unity常用API ⭐相关文章&#xff1a; 线性差值函数以及平滑阻尼的运用和实践&#xff08;Lerp AND SmoothDa…

文献阅读:Towards Out-of-Distribution Sequential Event Prediction:A Causal Treatment

文献阅读&#xff1a;Towards Out-of-Distribution Sequential Event Prediction&#xff1a;A Causal Treatment 1. 问题描述2. 方法 & 模型设计 1. loss定义2. 模型设计 3. 实验 & 结果 1. 基础实验2. CaseQ策略细节分析 4. 结论 & 总结 文献链接&#xff1a;ht…

GDB调试学习

文章目录简介准备工作常用命令简介 ​GDB 全称“GNU symbolic debugger”&#xff0c;它诞生于 GNU 计划&#xff08;同时诞生的还有 GCC、Emacs 等&#xff09;&#xff0c;是 Linux 下常用的程序调试器。发展至今&#xff0c;GDB 已经迭代了诸多个版本&#xff0c;当下的 GD…

五个了解自己天赋优势的分析工具(二)盖洛普优势测评

盖洛普优势测评 盖洛普优势识别器&#xff08;也叫克利夫顿优势评估&#xff09;&#xff0c;是盖洛普公司旗下⼀款王牌产品&#xff0c;是⼀个专⻔⽤来识别⼀个⼈隐形天赋、潜在优势、驱动⼒来源的⼯具&#xff0c;它可以帮助⼀个⼈科学认识⾃⼰。 它把⼈的思维⽅式、感受形…

网络初识

一些基本概念认识IP地址概念&#xff1a;IP地址用于定位主机的网络地址&#xff0c;标识了网络上设备所在的位置。也就是说主机在哪。格式&#xff1a;IP地址是一个32位的二进制数&#xff0c;通常被分割为4个字节。通常我们使用“点分十进制”的方式来表示主机的IP地址——>…

2.2 SQL入门和实战

文章目录数据库介绍MySQL的入门应用SQL的基础与DDLSQL的分类&#xff1a;SQL的基础语法特性&#xff1a;DDL库管理&#xff1a;DDL表管理&#xff1a;SQL-DMLSQL-DQLDQL基础查询DQL分组聚合排序分页Python&MySQLcommit数据库介绍 数据库的层级&#xff1a;按照库->表-&…

WAL Write AheadLog

WAL即 Write Ahead Log&#xff0c;WAL的主要意思是说在将元数据的变更操作写入磁盘之前&#xff0c;先预先写入到一个log文件中 磁盘读取分为顺序读取和随机读取 内存读取也有顺序读取和随机读取 下图是磁盘&#xff0c;内存 顺序和随机读取的效率表 一般来说内存读取速度要…

硬件设计基础 —— 电流、电压、功率

目录 电流的形成 原子的结构 原子核与电子 电子的移动 电流的测量 电子的运动形成电流 电压的作用 功率 电流的形成 原子的结构 上图为原子结构示意图中间带正电的称为原子核带负电荷的电子围绕在他周围旋转原子核与电子 电子离原子核越远&#xff0c;外围电子越少&…

Cadence PCB仿真使用Allegro PCB SI进行数字电路毛刺容差设置的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1, 概述2,配置方法3,总结1, 概述 数字信号的波形往往不是完美的低和高电平,经常会有一些毛刺。这在信号完整性仿真中也经常遇到,为了保证仿真顺利进行需要对接收电路的毛刺容差进行设置。本文简单介绍其配置方法。…

COCO_02 二值分割数据集制作为COCO数据集

文章目录1 前言2 分割数据集格式2.1 原始图像2.2 分割标注2.3 文件名信息3 制作COCO格式基本流程4 根据分割标注制作COCO标注&#xff08;核心&#xff09;Main1 前言 最近要开始实例分割任务&#xff0c;由于实例分割是建立再目标检测基础之上的&#xff0c;因此需要制作能用…

两道一年级数学题把我干废了

目录一、背景二、题目三、过程第一解&#xff1a;第二解&#xff1a;第三解&#xff1a;四、总结五、升华一、背景 最近在看小学一年级数学课本的时候&#xff0c;其中两道题让我感叹现在小学教育题的伟大和深厚&#xff0c;并且从中领悟到了…哈哈哈&#xff0c;先卖个官司&a…

【Ansible】Ansible 角色

Ansible 角色 文章目录Ansible 角色一、Ansible Roles 介绍二、Roles 结构三、role 的制作过程四、如何在PlayBook中使用 Role1. 经典&#xff08;原始&#xff09;方式2. 新方式五、如何使用 Galaxy一、Ansible Roles 介绍 一个数据中心有可能存在好多类型的服务器。比如&…

【博客588】ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制

ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制 ipvs的连接跟踪表和NAT机制 ipvs只有DNAT和de-DNAT功能 ,它独立与iptables和conntrack,实现了自己的一套连接跟踪表和NAT机制。ipvs仅仅在做DNAT后对conntrack连接进行更新,防止回包因为没有记录而被丢弃。 i…

邂逅Vue.js开发

1、认识Vue Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs&#xff1b;它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff1b;帮助你高效地开发用户…

学习笔记 一天学完JavaScript基础语法(全)

JavaScript 文章目录JavaScript第一章——初始JavaScript1.1 浏览器执行 JS 简介1.2 JS的组成1.2.1 ECMAScript1.2.2 DOM ——文档对象模型1.2.3 BOM ——浏览器对象模型1.3 JS的写法1.3.1 行内式写法1.3.2 内嵌式写法1.3.3 外部js文件1.4 注释1.5 变量1.5.1 变量声明1.5.2 变量…

【源码解析】Nacos配置中心的源码解析

POM文件添加依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>在依赖中查看自动装配文件spring.factories org.springframework.cloud.bootstr…

String类详解

在Java编程中&#xff0c;除Object类外&#xff0c;最常用的类就是String类了。本文将从String类源码出发&#xff0c;对String类进行一个全面的分析&#xff0c;以帮忙我们更好的理解和使用String类。 String类概述 Java 使用 String 类代表字符串。Java 中的所有字符串字面…

已解决MemoryError

已解决Python读取20GB超大文件报错&#xff1a;MemoryError 文章目录报错问题报错翻译报错原因解决方法1解决方法2&#xff08;推荐使用&#xff09;帮忙解决报错问题 日常数据分析工作中&#xff0c;难免碰到数据量特别大的情况&#xff0c;动不动就2、3千万行&#xff0c;…