【计算机网络】因特网中的电子邮件
文章目录
- 简单邮件传送协议SMTP
- 邮件访问协议
- POP3
- IMAP
- HTTP
- 参考资料
电子邮件为异步通信媒介
因特网电子邮件系统
电子邮件系统的三个构件:用户代理、邮件服务器、邮件发送和读取协议
用户代理
User Agent 即UA
电子邮件客户端软件,用户与电子邮件系统的接口,如Apple Mail、Outlook
功能:实现邮件的撰写、显示、处理、通信
邮件服务器
Mail Server,邮件传输代理
功能:发送和接收邮件,向发信人报告邮件传送的情况,客户服务器模式
邮件发送和读取协议
简单邮件发送协议 SMTP:在UA向邮件服务器、邮件服务器之间发送邮件
邮局协议POP3:UA从邮件服务器读取邮件
注意
- 邮件服务器在电子邮件系统中是同时充当了客户和服务器两个角色,在UA向Mail Server发送邮件过程中Mail Server充当服务器,在该Mail Server发送邮件时充当客户端,在该Mail Server接收邮件时充当服务器。每台邮件服务器上既运行SMTP的客户端也运行SMTP的服务器端。
- SMTP和POP3(或IMAP)协议都使用TCP连接实现邮件可靠传输
- 邮件不会在互联网中的某个中间邮件服务器落地
举个例子
发送方Alice发电子邮件给接收方Bob
Alice撰写邮件,其UA向对应的Mail Server发送邮件,邮件被放在该Mail Server的外出报文队列中,Alice的Mail Server将邮件传输到Bob的Mail Server,邮件被分发到Bob的邮箱,当Bob要阅读邮件时,Bob的UA在其Mail Server的邮箱中取得该邮件。
术语说明
报文队列(message queue):存放从该Mail Server发送的邮件,若邮件在发送方Mail Server到接收方的Mail Server之间的传送失败,发送方的Mail Server将尝试重新发送。若一段时间后仍不能发送成功,则发送方Mail Server将删除该报文并将以电子邮件的形式通知发送方
邮箱(mailbox):每个接收方(如Bob)在对应的邮件服务器上有一个邮箱(mailbox),mailbox管理和维护着发送给接收方的报文
电子邮件
组成:由信封 (envelope) 和内容 (content) 两部分组成
envelope是电子邮件传输协议传送邮件的依据
地址格式:收件人邮箱名@邮箱所在主机的域名
举个例子

简单邮件传送协议SMTP
基本介绍
SMTP协议规定了在两个相互通信的 SMTP 进程之间建立TCP连接交换信息的方法,使用客户端服务器方式
通信三阶段

分析报文通过SMTP协议从发送方Mail Server到接收方Mail Server的传送过程
- 连接建立:包括建立TCP连接和SMTP连接的握手阶段
- 邮件传送:传送内容包括信封、首部、空行和邮件主体
- 连接释放:客户SMTP传送完所有报文后,释放TCP连接(这里的TCP连接是持久的)
建立TCP连接
三次握手

SMTP握手阶段
客户SMTP使用HELO命令,指示发送方主机名
服务器SMTP回答:“250 OK” ,表示已准备好接收。

邮件传送阶段
报文结束标志为回车换行.回车换行

连接释放

注意
SMTP用的是持续TCP连接,从同一个发送Mail Server到同一个接收Mail Server的报文可以通过同一个TCP连接发送。报文以MAIL FROM: xx作为开始标志
尝试SMTP通信
使用telnet命令
多媒体数据传输
更改电子邮件的内容部分
在首部中说明MIME-Version,数据编码格式,多媒体文件格式等信息

举个具体的例子

SMTP与HTTP对比
相同点:
- 作用:用于从一台主机向另一台主机传送文件。HTTP从Web服务器向Web客户传送文件;SMTP从一个邮件服务器向另一个邮件服务器传送文件。
- 文件传送过程中二者使用的都是持续的TCP连接进行可靠数据传输
- 二者都是应用层协议
不同点:
- HTTP是一个拉协议(pull protocol),用户使用使用客户端从服务器拉取数据,TCP连接是由想接收文件的机器发起的。SMTP是一个推协议(push protocol),发送邮件服务器把文件推向接收邮件服务器,TCP连接是由要发送该文件的机器发起的。
- SMTP协议要求报文数据采用7比特ASCII码格式。
- 对于包含多种数据类型的文档的处理。HTTP把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中。
关于客户Mail Server和服务器Mail Server的讨论
若接收方的Mail Server和UA都位于其PC上,则其PC必须不间断地运行着并一直保持在线,这并不现实。因此通常情况下,Mail Server是共享的且由用户的ISP进行维护,本地PC上运行UA
发送方Mail Server的引入解决了发送方UA无法到达一个不可达的目的地Mail Server的问题,即发送方的Mail Server可以重复尝试向接收方Mail Server发送报文直到接收方Mail Server变得可运行
邮件访问协议
引入原因
接收方从Mail Server上的邮箱取得邮件是一个拉操作,而SMTP是一个推协议,这是不能完成的。
需要引入一个能完成拉操作的协议,即邮件访问协议
邮件访问常用协议
- 第三版的邮局协议(PostOffice Protocol—Version 3 , POP3)
- 因特网邮件访问协议(Internet Mail Access Protocol,IMAP)
- HTTP协议

POP3
使用客户服务器方式,基于TCP实现通信
用户代理(客户)打开一个到邮件服务器(服务器)端口 110上的TCP连接
工作的三个阶段
- 特许(authorization):UA发送(以明文形式)用户名和口令以鉴别用户。命令包括
user < user name >和pass < password > - 事务处理:UA取回报文、对指定报文做删除标记、获取邮件的统计信息。命令包括
list、retr和dele - 更新:当用户发出quit命令结束POP3会话之后,Mail Server将删除被标记为删除的报文
IMAP
使用客户服务器方式,基于TCP实现通信,端口143,这是一个联机协议
提出原因
解决POP3不能在远程服务器上建立层次文件夹等问题
特点
- IMAP服务器把每个报文与一个文件夹联系起来,能够实现用户在远程Mail Server上创建文件夹、移动文件、阅读查询删除文件
- 允许UA只获取报文某些部分。举个例子,一个用户代理可以只读取一个报文的报文首部
- 要想查阅邮件,必须先联网
HTTP
使用Web浏览器作为UA,进行邮件收取和邮件发送
于是电子邮件报文可以使用HTTP协议而非STMP协议从发送方UA发送到发送方Mail Server,使用HTTP协议而非POP3或者IMAP协议从接收方Mail Server拉取到接收方UA

使用 HTTP POST方法提交要发送的邮件
使用 HTTP GET 方法读取邮件
传统UA和基于Web的UA比较
传统UA必须在计算机中安装用户代理软件且收发邮件不方便
基于Web的UA不需要在计算机中再安装用户代理软件,只要计算机能联网就能非常方便地收发电子邮件
参考资料
- James F.Kurose&Keith W.Ross Computer Networking A Top-Down Approach(7th ed) 中文版
相关文章:
【计算机网络】因特网中的电子邮件
文章目录 简单邮件传送协议SMTP邮件访问协议POP3IMAPHTTP 参考资料 电子邮件为异步通信媒介 因特网电子邮件系统 电子邮件系统的三个构件:用户代理、邮件服务器、邮件发送和读取协议 用户代理 User Agent 即UA 电子邮件客户端软件,用户与电子邮件系统的接…...
【C++11】多线程
多线程创建线程thread提供的成员函数获取线程id的方式线程函数参数的问题线程join场景和detach 互斥量库(mutex)mutexrecursive_mutexlock_guard 和 unique_lock 原子性操作库(atomic)条件变量库(condition_varuable&a…...
【vue3】shallowReactive与shallowRef;readonly与shallowReadonly;toRaw与markRaw
假期第六篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 1、shallowReactive与shallowRef shallowReactive:只处理对象最外层属性的响应式(浅响应式) shallowRef:只处理…...
手机建模教程 | 如何从易模App中导出模型?有哪些格式?含贴图吗?
很多小伙伴使用易模App是为了能快速地将已有实物的物体“变成”三维模型后转到自己习惯的3D软件中去编辑,于是,大家都关心模型能否导出,以及导出格式有没有自己想要的? 博雅仔告诉大家,当然可以导出! 在导出…...
数据分析技能点-机器学习优化思想
优化思想,这个听起来极其专业和高端的词汇,其实它无处不在,悄无声息地影响着我们的生活和决策。从寻找最快的上班路线,到决定如何配置投资组合,优化思想都是一个不可或缺的元素。而在机器学习领域,优化思想更是扮演着至关重要的角色。 文章目录 优化的基础优化问题与实际…...
应用架构的演进:亚马逊的微服务实践
当你在亚马逊上购物时,或许不会想到,你看到的这个购物网站,其背后技术架构经历了什么样的变迁与升级。 还记得上世纪 90 年代,那个只卖书的网上书店吗?那时的亚马逊,不过是一个架构简单的网站,所有的功能都堆积在一个庞大的软件堡垒里。随着更多业务的增加、更新和迭代,这个软…...
leetCode 55.跳跃游戏 贪心算法
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 输入…...
CF505B Mr. Kitayuta‘s Colorful Graph
Mr. Kitayuta’s Colorful Graph 题面翻译 给出一个 n n n 个点, m m m 条边的无向图,每条边上是有颜色的。有 q q q 组询问 对于第 i i i 组询问,给出点对 u i , v i u_i,v_i ui,vi。求有多少种颜色 c c c 满足:有至…...
c#设计模式-结构型模式 之 组合模式
🚀简介 组合模式又名部分整体模式,是一种 结构型设计模式 ,是用于把一组相似的对象当作一个 单一的对象 。组合模式 依据树形结构来组合对象 ,用来表示部分以及整体层,它可以让你将对象组合成树形结构,并且…...
【Rust日报】2023-09-30 使用Rust做web抓取
CockroachDB 用rust重新实现 嘿,伙计们,我在 Rust 中实现了一个分布式 SQL 数据库。它就像 CockroachDB 和谷歌Google Spanner。告诉我你的想法。 注意: 这不是生产级别的数据库,这是一个以学习为目的的项目。有许多特性,但是缺少…...
【密评】商用密码应用安全性评估从业人员考核题库(三)
商用密码应用安全性评估从业人员考核题库(三) 国密局给的参考题库5000道只是基础题,后续更新完5000还会继续更其他高质量题库,持续学习,共同进步。 501 多项选择题 《个人信息保护法》要求个人信息处理者应当采取哪些…...
MySQL进阶_查询优化和索引优化
文章目录 第一节、索引失效案例1.1 数据准备1.2 全值匹配我最爱1.3 最佳左前缀法则 第一节、索引失效案例 可以从以下维度对数据库进行优化: 索引失效、没有充分利用到索引–索引建立关联查询太多JOIN (设计缺陷或不得已的需求)–SQL优化服务器调优及各个参数设置…...
Hadoop2复安装过程详细步骤
1、在vmware中更改了虚拟机的网络类型,--->NAT方式,(虚拟交换机的ip可以从vmvare的edit-->vertual network editor看到) 2、根据这个交换机(网关)的地址,来设置我们的客户端windows7的ip&…...
【Java-LangChain:面向开发者的提示工程-7】文本扩展
第七章 文本扩展 扩展是将短文本(例如一组说明或主题列表)输入到大型语言模型中,让模型生成更长的文本(例如基于某个主题的电子邮件或论文)。这种应用是一把双刃剑,好处例如将大型语言模型用作头脑风暴的伙…...
竞赛 基于设深度学习的人脸性别年龄识别系统
文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习机器视觉的…...
从技能需求到就业前景,了解前端和后端开发的优缺点和个人选择
文章目录 每日一句正能量一、引言前端开发后端开发 二、两者的对比分析三、技能转换和跨领域工作四:介绍全栈开发后记 每日一句正能量 命运决定的不是你的人生,能决定你人生的只有自己。 一、引言 前端和后端是Web开发中两个不可或缺的领域。前端开发主…...
Flutter笔记:AnimationMean、AnimationMax 和 AnimationMin 三个类的用法
Flutter笔记 AnimationMean、AnimationMax 和 AnimationMin三个类的用法 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/…...
华为云云耀云服务器L实例评测|云耀云服务器L实例部署Gogs服务器
华为云云耀云服务器L实例评测|云耀云服务器L实例部署Gogs服务器 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、Gogs介绍2.1 Gogs简介2.2 Gogs特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、远程登录华为云云耀云…...
操作系统--分页存储管理
一、概念介绍 分页存储:一是分内存地址,二是分逻辑地址。 1.分内存地址 将内存空间分为一个个大小相等的分区。比如,每个分区4KB。 每个分区就是一个“页框”,每个页框有个编号,即“页框号”,“页框号”…...
【算法练习Day10】有效的括号删除字符串中的所有相邻重复项逆波兰表达式求值
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 有效的括号删除字符串中的所…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
