计算机网络——应用层之电子邮件(E-mail)

2023-11-18

一:基本概念

电子邮件(E-mail)是目前Internet上使用最频繁的服务之一。电子邮件是以电子方式发送传递的邮件。只要通信双方都有电子邮件地址,便可以电子传播为媒介,交互邮件。Internet上电子邮件系统采用客户机/服务器模式,信件的传输通过相应的软件来实现,这些软件要遵循有关的邮件传输协议。

电子邮件系统的基本组成:
在这里插入图片描述

  • UA(User Agent,用户代理):该客户端软件用来编写、显示、与本地邮件服务器的通信(发送/接受邮件)。如:Outlook Express, Foxmail等。
  • MTA(Message Transfer Agent,消息传输代理):该服务器软件用来传递信件,向发件人报告邮件传送情况(已交付、被拒绝、丢失等)。如:Microsoft exchange Server,Sandmail等。

传送电子邮件时使用的协议:

  • 简单邮件传输协议(Simple Mail Transport Protocol,SMTP):用于电子邮件发送服务,也即用于MTA之间以及UA向MTA传输邮件。
  • 邮局协议(Post Office Protocol,POP),用于电子邮件接收服务,也即用于收件人从本地邮件服务器中读取邮件。
  • 还有其他的通信协议,在功能上它们与上述协议是相同的。

电子邮件地址:

  • 用户在Internet上收发电子邮件时,必须拥有一个电子信箱(Mailbox),而每个电子信箱有一个唯一的地址,通常称为电子邮件地址(E-mail Addresses)。
  • E-mail地址由两部分组成,以符号“@”分隔,“@”前面的部分是用户名,“@”后面的部分为邮件服务器的域名,如E-Mail地址“yuqi.fan@qq.com”中,“yuqi.fan”是用户名,“qq.com”为网易的邮件服务器的域名。

电子邮件工具:

  • 电子邮件应用程序很多,常见的有Foxmail、Outlook等。

二:SMTP命令和传递邮件过程

SMTP命令:

  • SMTP是目前使用最广泛的邮件传输协议,该协议基于TCP和C/S方式,服务器端口号为25。
  • SMTP发送E-mail的基本思想是接收端(即服务器)在TCP的25号端口等待发送端的信息,发送端向接收端发出连接请求,一旦连接成功,即进行邮件信息的交换,邮件传递结束后释放连接。
  • 由于SMTP使用客户机/服务器方式,因此负责发送邮件的SMTP进程就是SMTP客户,而负责接收邮件的SMTP进程就是SMTP服务器。
  • SMTP提供了这样一种邮件传输机制
    • 当收件方和发件方都在同一个网络上时,可以将邮件直接传送给对方;
    • 当对方不在同一个网络上时,需要通过一个或者几个中间服务器来进行转发SMTP。

SMTP传递邮件过程:

  • 首先由发件方提出申请,要求与接收方SMTP建立双向通信渠道,收件方可以是最终收件人,也可以是中间转发服务器
  • 收件方服务器确认可以建立连接以后,双方就可以开始通信了,发件方SMTP向收件方SMTP发出MAIL命令,告知发件方的身份,如果收件方接收,就回答OK。
  • 发件方再发出RCPT命令,告知收件人的身份,收件方SMTP确认是否接收或转发,如果同意,就回答OK,接下来就可以进行数据传输了
  • 在通信过程中,发件方SMTP与收件方SMTP采用对话式交互方式,即发件方提出要求,收件方进行确认,确认以后才进行下一步的动作,整个过程由发件方控制,有时需要确认几回才能够实现。

SMTP面向字符,包括14条命令和21种应答组成,常用命令如下:
在这里插入图片描述
SMTP传递邮件过程:
在这里插入图片描述

三:电子邮件的信息格式

  • 一个电子邮件分为信封和内容两大部分。
  • RFC 822只规定了邮件内容中的首部(header)格式,而对邮件的主体(body)部分则让用户自由撰写。
  • 邮件内容首部包括一些关键字,后面加上冒号。最重要的关键字是:To和Subject。
    • “To:”后面填入一个或多个收信人的电子邮件地址。用户只需打开地址簿,点击收信人名字,收信人的电子邮件地址就会自动填入到合适的位置上。
    • “Subject:”是邮件的主题。它反映了邮件的主要内容,便于用户查找邮件。
    • “抄送:”表示应给某某人发送一个邮件副本。
    • “From:”和“Date:”表示发信人的电子邮件地址和发信日期。
    • “Reply-To:”是对方回信所用的地址。

四:POP3命令和读取邮件过程

  • POP主要用于电子邮件的接收,使用TCP的110端口。POP也使用客户机/服务器的工作方式。在接收邮件的用户 PC 机中必须运行 POP 客户程序,而在用户所连接的ISP邮件服务器中则运行 POP 服务器程序。
  • POP是一个非常简单、但功能有限的邮件读取协议,现在使用的是它的第三个版本 POP3( RFC1939 )。
  • 当客户机需要服务时,客户端的软件(比如Outlook或Foxmail),将与POP3服务器建立TCP连接。
  • 此后,需要经过POP3协议的三种工作状态:
    • 认证过程,确认客户机提供的用户名和密码;
    • 处理状态,用户在该状态下可以收取自己的邮件或者删除邮件;
    • 客户机发出QUIT命令,此后进入更新状态,将做了删除标记的邮件从服务器删除。

POP3常用命令如下:
在这里插入图片描述

五:IMAP

  • 交互式邮件存取协议(Internet Message Access Protocol,IMAP)也是按客户机/服务器方式工作,现在较新的版本是IMAP4。
  • 用户在自己的主机上就可以操纵 ISP 邮件服务器的邮箱,就像在本地操纵一样。因此 IMAP 是一个联机协议。当用户的 IMAP 客户程序打开 IMAP 服务器的邮箱时,就可看到邮件的首部。若需要打开某个邮件,则该邮件才传到用户的计算机上。
  • IMAP最大的好处就是用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件。
  • IMAP 还允许收信人只读取邮件中的某一个部分。例如,收到了一个带有视像附件(此文件可能很大)的邮件。为了节省时间,可以先下载邮件的正文部分,待以后有时间再读取或下载这个很长的附件。
  • IMAP 的缺点是如果用户没有将邮件复制到自己的 PC机上,则邮件一直存放在 IMAP 服务器上。因此用户需要经常与 IMAP 服务器建立连接。

IMAP4是IMAP的最新版本,其主要特征包括:
(1)与因特网消息标准完全兼容;
(2)许多计算机可以同时访问和管理邮件;
(3)允许通过低效率的文件访问协议来进行访问;
(4)提供对在线、离线以及无连接三种访问方式的支持;
(5)支持共享邮箱的并发访问;
(6)客户端软件不需要了解服务器上的文件存储格式。

必须注意的是不要将邮件读取协议POP或IMAP与邮件传送协议 SMTP弄混。

  • 发信人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件,都是使用SMTP 协议。
  • POP协议或IMAP协议则是用户从目的邮件服务器上读取邮件所使用的协议。

SMTP有以下缺点:

  • (1)SMTP不能传送可执行文件或其他的二进制对象。
  • (2)SMTP限于传送7位的ASCII码。许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送。
  • (3)SMTP 服务器会拒绝超过一定长度的邮件。
  • (4)某些SMTP的实现并没有完全按照RFC 821的SMTP 标准。

六:通用因特网邮件扩充MIME

  • MIME没有改动SMTP或取代SMTP 。
  • MIME继续使用目前的RFC 822格式,但增加了邮件主体的结构,并定义了传送非ASCII 码的编码规则。
  • MIME协议说明了如何安排消息格式使消息可以在不同邮件系统内进行交换,MIME格式灵活,它允许邮件中包含任意类型的文件,可以包含文本、图像、声音、视频以及其他应用程序的特定数据。

三种常用的内容传送编码(Content-Transfer-Encoding):

  • (1)最简单的编码就是7位ASCII码,而每行不能超过1000 个字符。MIME 对这种由 ASCII 码构成的邮件主体不进行任何转换。
  • (2)另一种编码称为quoted-printable,这种编码方法适用于当所传送的数据中只有少量的非ASCII码的情况。
  • (3)对于任意的二进制文件,可用base64编码。

MIME的标准规定Content-Type说明必须含有两个标识符,即内容类型(type)和子类型(subtype),中间用“/”分开。MIME 标准定义了7种基本内容类型和 15 种子类型。除了内容类型和子类型,还允许发信人和收信人自己定义专用的内容类型。

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络——应用层之电子邮件(E-mail) 的相关文章

  • Swift-Mailer 错误,“给定邮箱中的地址 [] 不符合 RFC”

    我构建了一个简单的 PHP 联系表单 该表单应该通过 Swiftmailer 脚本发送邮件 问题是我不断收到此错误 未捕获的异常 Swift RfcComplianceException 与 message 给定邮箱中的地址 不符合 RFC
  • 使用 MVCMailer 尝试发送到非本地电子邮件地址时,邮件服务器需要身份验证

    我想向用户发送新闻通讯电子邮件 我已经这样做了 public ActionResult SendNewsLetter userMailer NewsLetter Send return View 在 userMailer 类中 public
  • 如何在电子邮件正文中发送 R Markdown 报告?

    更新 布兰登 贝特尔森的回答 布兰登的答案产生以下输出 它不会像 Rstudio 那样生成漂亮的表格或突出显示代码 并且它会在某些带有 unicode 的 html 文件上崩溃 因此我没有使用它来自动化我的电子邮件报告 我目前的做法是用Rs
  • Python:从自定义域发送电子邮件

    我正在尝试从 Python 中的自定义域发送电子邮件 我已经弄清楚如何使用 smtplib 从其他域 例如 gmail com 发送电子邮件 示例代码 https stackoverflow com questions 57842922 c
  • Android 应用程序开发 - 不带 Intent 直接发送电子邮件

    任何人都可以建议我如何在不使用意图或打开另一个 Android 应用程序的情况下发送电子邮件 我希望点击发送按钮后直接发送电子邮件 我必须使用特定的 Office365 电子邮件来发送消息 我应该使用一些 API 或 SMTP 等吗 有没有
  • ASP.NET 的电子邮件地址验证

    使用什么来验证 ASP NET 表单上的电子邮件地址 我想确保它不包含 XSS 漏洞 这是 ASP NET 1 1 ASP NET Web 表单上发布的任何脚本标记都会导致您的网站抛出未处理的异常 您可以使用 asp 正则表达式验证器来确认
  • 如何使用 ng-pattern 验证 angularJs 中的电子邮件 ID

    我正在尝试使用 ng pattern 指令验证 angularJs 中的电子邮件 id 字段 但我是 AngularJs 的新手 我需要在用户输入错误的电子邮件 ID 后立即显示错误消息 我下面的代码正在尝试解决 帮助我使用 ng patt
  • Django 抛出此错误:SMTPException:服务器不支持 STARTTLS 扩展

    由于 gmail 中发送邮件的限制 我在我的一台服务器上安装了 exim4 设置如下 dc eximconfig configtype internet dc other hostnames mydomain com localhost l
  • PHP 会话中的数据错误

    我对网上商店进行了以下设置 当用户登录时 通过 AJAX 调用脚本 该脚本根据 SOAP Web 服务验证用户数据 并返回用户数据 当用户登录时 用户数据保存在 PHP 会话中 用户数据 仅通过 SOAP 检索 而不由商店存储 我使用默认的
  • 在电子邮件中设置 html 样式

    我正在为有能力的客户发送 HTML 版本的电子邮件 现在这不是几乎全部吗 我担心的是如何设计它 我使用内联CSS吗 我可以在 html 中包含样式表吗 html 是否以 or 我可以阅读这方面的标准吗 我在造型方面能走多远 我有边框半径 背
  • 将数据从 Excel 导出到 Outlook

    我已经用 Excel 起草了一封电子邮件 其中填充了数据表中的信息 单元格 A1 到 A4 包含 嗨 希望你做得好 和消息 等等 A5到H10有一个包含信息的表格 A11到A30有类似 期待您的回复 的电子邮件内容 我只想复制 A1 A4
  • Flutter“Mailer”API 多图像附件

    我正在制作一个简单的应用程序 用于从用户获取个人信息和图像数量 然后通过后端邮件 API 通过一键单击按钮发送它们 到目前为止 我可以通过邮件获取和发送 FormData 但我不知道如何发送图像数组 我已经尝试了几个 API 但 Maile
  • AttributeError:发送电子邮件时“列表”对象没有属性“编码”

    我想要这段代码 我可以有一个 csv 文件 其中一行电子邮件旁边有一排姓名 然后通过电子邮件发送列表中的每封电子邮件 但消息中包含每个姓名 这是我的代码 import smtplib from email mime text import
  • 是否有关于 EML 文件格式的 RFC?

    基本上 我正在尝试使用 EML 文件 我想知道这些文件在不同的电子邮件服务器上是否相当标准 基本上 EML 文件上是否有一个 RFC 就像电子邮件地址和其他主题的 RFC 一样 我想我可以更具体一点 以便更好地了解我需要什么 我正在扫描 E
  • PHP语言问题

    我有一个 php 页面 它将邮件发送到特定电子邮件 其中包含此页面表单中的数据 邮件必须以网站的母语 阿拉伯语 发送 但是当我单击表单上的提交按钮时 收到的邮件一半可读 阿拉伯语 另一部分不可读 符号 我想知道如何解决这个问题并且能够发送邮
  • 如何从 Ruby 程序发送邮件?

    我想从 Ruby 应用程序发送电子邮件 核心语言中是否有调用来执行此操作 或者是否有我应该使用的库 最好的方法是什么 如果你不想使用行动邮递员 http wiki rubyonrails org rails pages ActionMail
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 电子邮件链接在 Android 上不起作用

    我有 HTML 格式的点击电子邮件链接的代码 它在我的电脑上运行良好 但在移动设备上不起作用 我只有 Android 所以我不知道问题是否仅在 Android 上或所有移动设备上 当我按下链接时 浏览器显示 网页无法显示 邮寄至 电子邮件受
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage
  • PHP:如何发送电子邮件基础知识

    我想使用 PHP 从本地主机向其他人发送电子邮件 我需要做什么才能做到这一点 例如我需要安装邮件服务器吗 如果我没记错的话 有一种语言不需要邮件服务器来发送电子邮件 这样对吗 PHP ini里面有 邮件功能 如何配置这个 我在网上查了一下

随机推荐

  • Java全栈面试题(三)--Redis

    对Redis的理解 Redis是一款开源的高性能键值对存储系统 支持多种数据类型 如字符串 哈希 列表 集合 有序集合等 主要用于缓存 消息队列 排行榜 计数器等场景 能够提供快速读写 高并发 持久化等功能 Redis是单线程的 通过采用多
  • java -jar后台启动的四种方式

    Linux系统启动java项目四种方法 1 用java jar xxx jar 点击回车就会启动成功 但是当退出或者关闭远程工具就会把进程关闭 以上就是启动的项目Java jar xxx jar 但是点击过Ctl c或者把此窗口关闭 就会杀
  • 【Linux】shell命令与文件权限

    目录 前言 shell命令以及运行原理 Linux权限的概念 1 文件访问者的分类 人 2 文件类型和访问权限 事物属性 3 文件权限值的表示方法 4 文件访问权限的相关设置方法 4 1 chmod指令 4 2 chown指令 4 3 ch
  • 计算机应届博士生的一点求职经验——华为篇

    一点也许有用的求职经验与感悟 前言 机考 技术面试 主管面试 HR面试 性格测试 思考与选择 前言 华为的应届生申请可以填写2个志愿 一共有五道考核 机考 必做 2轮技术面试 部门主管面试 HR 面试和性格测试 本文会对这几个方面分别展开
  • 解决neo4j导入数据时报错:neo4j already contains data, cannot do import here报错

    完整报错如下 java lang IllegalStateException neo4j already contains data cannot do import here at org neo4j internal batchimpo
  • Android Webview 部分图片显示不出来问题

    最近发现在华为Mate 10 上面我们app的内置webview会有部分图片不展示 直接就图裂了 经过绕了一大圈后才解决了问题 其实问题原因很简单 但是分析过程不顺利 拿出来分享下 希望可以帮助大家少走弯路 简单说下这个问题的背景 1 我们
  • Geoffrey Hinton、姚期智、张钹、Sam Altman等专家共话AI安全与对齐丨2023智源大会议程公开...

    6月9日 2023北京智源大会 将邀请AI领域的探索者 实践者 以及关心智能科学的每个人 共同拉开未来舞台的帷幕 你准备好了吗 与会知名嘉宾包括 图灵奖得主Yann LeCun OpenAI创始人Sam Altman 图灵奖得主Geoffr
  • stata如何看某个命令的options?即逗号后面可以加上哪些命令

    以codebook这一命令为例 在命令窗口输入 help codebook 则会出现以下内容
  • mysql text多少字节_mysql里面text能存多大的数据

    展开全部 最多可以存储65535字节来数据 源 在mysql中 文本文件bai存储从0到65 535字节 du64KB 的字节 因此 mysql中的文zhi本最多可以dao存储65 535字节 文本文件有四种类型 tinytext Text
  • 05_numpy学习笔记(下):大作业

    大作业回顾 1 导入鸢尾属植物数据集 保持文本不变 知识点 输入和输出 如何导入存在数字和文本的数据集 numpy loadtxt 2 求出鸢尾属植物萼片长度的平均值 中位数和标准差 第1列 sepallength 知识点 统计相关 如何计
  • vue3组件之间通信(三)——爷孙组件传递属性和方法

    文章目录 1 setup函数传递属性和方法 attrs 1 代码 2 主要代码和详细讲解 3 注意点 2 script setup 语法糖传递属性和方法 1 代码 2 主要代码和详细讲解 3 注意点 前言 爷孙组件使用prop一层一层传值和
  • drag diffusion中的gradio代码逐行解析

    gradio库是一个用于创建简单web应用程序的库 允许用户通过浏览器和程序进行交互 1 gr Blocks 使用with创建 在with中创建的任何组件都会自动添加到应用程序中 组件按创建顺序垂直显示在应用中 Blocks 模块用于组件在
  • Swoole从入门到入土(18)——WebSocket服务器[心跳ping]

    由于 WebSocket 是长连接 如果一定时间内没有通讯 连接可能会断开 这时候需要心跳机制 WebSocket 协议包含了 Ping 和 Pong 两个帧 可以定时发送 Ping 帧来保持长连接 1 心跳原理图 2 websocket协
  • 【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统

    这里写目录标题 1 WAMP环境简介 2 WAMP环境部署详细过程 2 1 要求 2 2 虚拟机安装win2008R2SP1 2 2 1 安装前准备 2 2 2 在VMware里创新新的虚拟机 2 2 3 在虚拟机里装win2008R2SP
  • 软件外包开发的流程图工具

    软件开发过程中需要画流程图 可以更清楚的表达软件业务流程 减少在开发过程中的业务理解偏差 因此在软件开发过程中流程图工具是必不可少的软件管理工具 今天和大家分享常见的一些软件流程图工具 每款工具都有其自身的特色 用户可以根据自身的需求选择合
  • OnEnable方法详解(Unity)

    OnEnable方法详解 介绍 在Unity中 OnEnable是一个生命周期方法 用于在脚本或组件被激活时执行特定的操作 当启用对象或启用脚本时 Unity会自动调用OnEnable方法 这使得我们可以在脚本激活时执行一些初始化任务或准备
  • mysql PXC集群脑裂及grastate.dat修改实验

    三台服务器做了 mysql PXC 集群 172 31 217 182 bd dev mingshuo 182 172 31 217 183 bd dev mingshuo 183 172 31 217 89 bd dev vertica
  • android 侦听apk安装成功,再执行界面的更新操作

    这是我项目里需要在安装完应用后 马上能侦听到新的应用安装成功 并且更新相应的界面用到的 1 项目里添加侦听类 然后配置文件加权限 就ok import android content BroadcastReceiver import and
  • 如何快速搭建全链路平台,展示服务拓扑以分析性能

    写在前面的话 限于本文作者水平 仅仅以node为web server和后端 数据库采用mongodb 来展示全链路的可视化 全链路可视化的必要性 微服务架构越来越流行 技术中台部 基础架构部等部门的分工也越来越精细化 原本一次请求可能只涉及
  • 计算机网络——应用层之电子邮件(E-mail)

    一 基本概念 电子邮件 E mail 是目前Internet上使用最频繁的服务之一 电子邮件是以电子方式发送传递的邮件 只要通信双方都有电子邮件地址 便可以电子传播为媒介 交互邮件 Internet上电子邮件系统采用客户机 服务器模式 信件