6.2.6 网络基本服务----电子邮件系统(E-mail)

news2024/10/7 4:33:16

6.2.6 网络基本服务----电子邮件系统(E-mail)

电子邮件系统是因特网上使用的最多且最受用户欢迎的一种应用

电子邮件系统包括用户代理和邮件服务器,提供收发邮件、邮件传送服务,邮件被传送到收信人邮件服务器的收信人信箱中,收信人可随时上网到其邮件服务器读取。

1982年制定了简单邮件传送协议SMTP(Simple Mail Transfer Protocol)和因特网文本报文格式,他们都已成为因特网的正式标准。

1993年提出了通用因特网邮件扩展MIME(Multipurpose Internet Mail Extensions),MIME重新定义了邮件/消息的格式,在MIME邮件中可同时传送多种类型的数据。

一、电子邮件发送接收过程

电子邮件系统包含用户代理和邮件服务器如图所示

电子邮件系统

用户代理UA是用户与电子邮件系统的接口,用户代理的功能是撰写、显示和处理邮件

邮件服务器的功能是发送和接收邮件同时还要向发信人报告邮件传送的情况(如已交付、被拒绝、丢失等)。邮件服务器基于客户/服务器方式工作,一个邮件服务器既可以作为客户也可以作为服务器。

邮件服务器需要使用两个不同的协议:SMTP协议用于发送邮件,邮局协议如POP3是用来接收邮件的协议。电子邮件的发送和接收过程如下:

  1. 首先发信人调用用户代理,编辑要发送的邮件,用户确认发送后用户代理使用SMTP协议将邮件传送给发送端邮件服务器
  2. 发送端邮件服务器,将邮件放入邮件缓存队列当中等待发送。
  3. 运行在发送端邮件服务器的SMTP客户进程,发现邮件缓存中有待发送的邮件,就向运行在接收端邮件服务器的SMTP服务器进程发起TCP连接的建立。
  4. TCP连接建立后,SMTP客户进程开始向远程的SMTP服务器进程发送邮件。但所有到该SMTP服务器的待发送邮件发完了,SMTP就关闭所有建立的TCP连接。
  5. 接收端邮件服务器中的SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱中,等待收信人在方便时进行读取。
  6. 收信人在打算收信时,调用用户代理,使用POP3(或IMAP)协议将自己的邮件从接收端邮件服务器的用户邮箱中取回(如果邮箱中有来信的话)。

二、电子邮件组成

  1. 一个电子邮件由信封(envelope)和内容(content)两部分组成,信封包含完成传输和交付所需要的信息,内容是地送给收信人的对象。

  2. 电子邮件的传输程序根据邮件信封上的信息来传送邮件。在邮件的信封上最重要的就是收信人的地址

  3. 用户在从自己的邮箱中读取邮件时才能见到邮件的内容

  4. [RFC 822]之规定了邮件内容的格式和一些语义,不包含信封中信息的规范,规定了邮件内容中首部(header)的格式,而内容主体(message body)部分则让用户自由撰写。message = fields*(CRLF * text),这其中规定的内容首部必须在主体之前写一个空行结束,所谓的空行就是两个连续的回车换行。因为首部每个字段也以回车换行结束,所以这里的首部是两个连续的回车换行结束。

  5. 用户写好首部后,邮件系统将自动提取信封所需要的信息,并写在信封上。所以用户不需要填写电子邮件信封上的信息。

  6. 邮件内容首部包含一些字段,协议不要求首部字段以特定顺序出现。字段后面要加上冒号,最重要的字段是:To和Subject。

    • “To:”后面填入一个或多个收信人的电子邮件地址。用户可以打开地址簿点击收信人的名字,收信人的电子邮件地址就会自动的填入到合适的位置上。
    • “Subject:”是邮件的主题。它反映了邮件的主要内容,便于用户查找邮件
    • “Cc:”表示抄送,给某某人发送一个邮件副本。
    • "from:"和“Date:”表示发信人的电子邮件地址和发信日期。
    • "Reply-To:"是对方回信所使用的地址
  7. TCP/IP 体系的电子邮件系统规定电子邮件地址格式如下:

    收信人邮箱名@邮箱所在主机的域名

    这里需要注意的邮箱用户名在邮箱所在主机域名的范围内是惟一的。邮箱所在主机的域名在全世界必须是惟一的。

三、简单邮件传送协议 SMTP

SMTP所规定的就是在两个相互通信的SMTP进程之间应如何交换信息。

由于SMTP使用客户/服务器模式,因此负责发送邮件的SMTP进程就是SMTP客户,而负责接收邮件的SMTP进程就是SMTP服务器。SMTP设计基于下图的通信模型

模型

当点击确认发送邮件后,Sender-SMTP与Receiver-SMTP建立双向的传输通道,Receiver-SMTP既可能是最终的终点也可能是中间的服务器。

  1. Sender-SMTP产生SMTP命令,命令被发送到Receiver-SMTP,作为相应,应答会从Receiver-SMTP发送回Sender-SMTP
  2. 一旦建立的传输信道,Sender-SMTP会发送一个mail命令,指示邮件的发送者是谁,如果Receiver-SMTP能够接受邮件的话就用Ok作为应答来响应。
  3. Sender-SMTP会发送一个RCPT命令,标识邮件的收信人。如果Receiver-SMTP能够接收给收信人的邮件,则用OK应答作为相应,如果不能则拒绝收信人的应答。Sender-SMTP和Receiver-SMTP可能协商多个收信人,当协商好收信人时,Sender-SMTP会发送邮件数据。如果Receiver-SMTP成功处理了邮件数据,就会以ok作为应答。

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

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

相关文章

这所C9考数二英二!但409分被刷,387分直接放弃复试!

一、学校及专业介绍 西安交通大学简称“西安交大”,位于陕西省西安市,是中华人民共和国教育部直属的综合性研究型全国重点大学,由教育部、陕西省与国家国防科技工业局共建,国家“双一流”建设高校,首批进入国家“211工…

Sentionel流控授权规则

很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过: 若配置白名单,则只有请求来源位于…

ELK日志记录——Kibana组件——grok 正则捕获插件、mutate数据修改插件、multiline 多行合并插件、date 时间处理插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

Java 查找二叉树中某一结点的前驱结点以及后继结点

文章目录 前言什么是后继结点什么是前驱结点 代码实现查找某一结点的后继结点思路代码实现图解 查找某一结点的前驱结点思路代码实现图解 测试用例运行结果 结语 前言 给定二叉树结点定义Node结构如下,其中parent结点指向当前Node结点的父结点,根结点指向null&…

c++ 资源文件打包exe 写出指定目录

#include <iostream> #include <fstream> #include <Windows.h>int main() {// 加载资源HMODULE hModule GetModuleHandle(NULL);// HRSRC hResource FindResource(hModule, MAKEINTRESOURCE(IDR_MYSYS), RT_RCDATA);// IMAGE 是添加资源文件时起的名字HRS…

BOSHIDA DC电源模块过载保护的原理

BOSHIDA DC电源模块过载保护的原理 DC电源模块过载保护的原理是通过电路设计和控制算法来实现的&#xff0c;其基本思想是在系统发生过载时&#xff0c;通过控制电路的工作状态和输出特性&#xff0c;实现对输出电流的限制和保护。 具体来说&#xff0c;DC电源模块的过载保护主…

智慧城市建设与数字孪生技术的紧密关联

智慧城市是当今社会发展的趋势&#xff0c;它通过智能技术和数字化手段&#xff0c;实现城市各个领域的高效运行和可持续发展。而数字孪生技术作为智慧城市建设的重要支撑&#xff0c;正在发挥着重要的作用。 首先&#xff0c;数字孪生技术在城市规划和设计方面发挥着重要作用…

【C语言】4-C语言的数据表现形式之数据类型

0. 引言 在之前的例子中可以看到&#xff0c;在定义变量时需要指定变量的类型。C 语言要求在定义所有的变量与常量时都要指定变量的类型 为什么在用计算机运算时要指定数据的类型呢&#xff1f;在数学中&#xff0c;数值是不分类型的&#xff0c;数值的运算是绝对准确的&#…

重塑未来的1课:组装式交付新引擎——华为云智能化低代码平台

HDC期间可参与Astro注册抽奖&#xff0c;活动详情见文末&#xff01; 紧跟低代码技术飞速发展——华为云Astro智能工作流惊艳HDC.Cloud 2023&#xff01; 企业对未来智能化组装式交付的期待已不是空想。智能化低代码即将重新定义传统交付模式&#xff0c;密切连接AI科技与创造…

ue4 MRQ渲染器时,媒体纹理播放速度会被加快

问题描述&#xff1a;当MRQ渲染器开启抗锯齿时&#xff0c;媒体纹理的播放速度会被加快 解决办法&#xff1a;通过执行抗锯齿控制台命令来解决

手写文字识别为何这么难?怎么应对?

手写文字识别是一项极具挑战性的任务&#xff0c;它之所以比识别印刷体文字难&#xff0c;笔者认为&#xff0c;主要原因在于以下几个方面&#xff1a; 首先&#xff0c;手写文字样式的多样性是识别难度的主要来源。我们知道&#xff0c;签名具有法律效力&#xff0c;为什么呢…

前端|项目实操流程|学成在线项目实操

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;案例准备工作 &#x1f4da;CSS属性书写顺序 &#x1f407;布局定位属性 &#x1f407;自身属性 &#x1f4da;页面布局整体思路 &#x1f4da;学成在线项目制作 &#x1f4…

ELK 企业级日志分析系统的概念、ELK Elasticsearch 集群部署

ELK 企业级日志分析系统 一、ELK 的概述1、ELK 简介2、可以添加的其它组件3、filebeat 结合 logstash 带来好处&#xff1a;4、Fluentd的概念 二、ELK的特征与工作原理1、为什么要使用 ELK2、完整日志系统基本特征3、ELK 的工作原理 三、ELK Elasticsearch 集群部署&#xff08…

设计模式——门面模式

门面模式 定义 门面模式&#xff08;Faade Pattern&#xff09;又称为外观模式&#xff0c;是一种比较常用的封装模式。 要求一个子系统的外部与其内部的通信通过一个统一的对象进行。门面模式提供一个高层次的接口&#xff0c;使得子系统更易于使用 优缺点、应用场景 优点…

关于VUE报错“TypeError: Converting circular structure to JSON“

关于VUE报错“TypeError: Converting circular structure to JSON" 问题&#xff1a; [Vue warn]: Error in nextTick: "TypeError: Converting circular structure to JSON--> starting at object with constructor Vue| property $options -> object wit…

Linux驱动进阶(二)——设备驱动中的阻塞和同步机制

文章目录 前言阻塞与非阻塞等待队列等待队列概述等待队列的实现等待队列的使用 同步机制实验同步机制设计实验验证 小结 前言 阻塞和非阻塞是设备访问的两种基本方式。使用这两种方式&#xff0c;驱动程序可以灵活地支持阻塞与非阻塞访问。在写阻塞与非阻塞的驱动程序时&#…

喜报!Coremail连续4届入选嘶吼网络安全产业图谱

7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》&#xff08;以下简称“图谱”&#xff09;。 Coremail成功入选本次图谱五大分类下14个细分领域&#xff0c;分别是安全自动化/协作&#x…

linux中数据库表相关查询

目录 1.显示所有职工的基本信息 2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号 3.求出所有职工的人数 4.列出最高工资和最低工资 5.列出职工的平均工资和总工资 6.创建一个只有职工号&#xff0c;姓名和参加工作的新表&#xff0c;名为工作日期表 7、显示所…

GPT(Generative Pre-Training)论文解读及实现(一)

1 GPT Framework 1.1 Unsupervised pre-training Given an unsupervised corpus of tokens U {u1, . . . , un}, we use a standard language modeling objective to maximize the following likelihood: 在给定语料上下文环境下&#xff0c;目标时最大化下面的语言模型&…

Java8 Stream 使用详解

Java8 Stream 使用详解 一、流的定义二、流的创建1. 通过集合创建流&#xff1a;2. 通过数组创建流&#xff1a;3. 通过Stream.of()创建流&#xff1a;4. 通过Stream.generate()创建流&#xff1a;5. 通过Stream.iterate()创建流&#xff1a;6. 通过文件、网络、IO流等方式来创…