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

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.hqwc.cn/news/19763.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用STM32实现 蓝牙插座

硬件介绍 蓝牙模块HC-01,其实之前就用过,使用起来非常简单 继电器模块, (VCC 3.3V)当左侧IN输入低电平时,右侧的ON 和 COM会导通,左上的绿灯会亮,此处充当插座的角色 项目需求 通过蓝牙的串口发送open打开…

8086变址寄存器和字符串拷贝程序学习

在此文用到了si和di寄存器; 8086汇编语言显示带颜色的字符串程序学习 - 使用emu8086_bcbobo21cn的博客-CSDN博客 下面单独来学习si和di寄存器; SI和DI是8086CPU中和BX功能相近的寄存器; 区别:SI和DI不能够分成两个8位寄存器来使用&#xff…

docker安装的mysql更改全文检索分词配置

这里使用的是mysql8.0,默认使用ngram分词 这里是已经将文件从容器中挂载出来了,没挂载出来要去容器内部更改my.cnf文件并重启mysql容器 步骤 一、查看mysql的分词大小 show variables like %token%;ngram_token_size这里默认是2我已经改为1了 这个值…

本地运行Segment Anything

按原项目GitHub - facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.步骤 Ins…

【C++初阶】C++入门——引用

文章目录 一、引用的概念二、共用同一块空间验证三、引用的特性3.1 引用在定义时必须初始化3.2 一个变量可以有多个引用3.3 引用不能改变 四、引用的使用场景4.1 做参数4.2 做返回值 五、传值、传引用效率比较六、常引用6.1 权限放大——不被允许6.2 权限平移6.3 权限缩小6.4 赋…

springboot+mysql财务管理系统

财务管理系统的开发运用java技术、springboot框架,MIS的总体思想,以及Mysql等技术的支持下共同完成了该系统的开发,实现了财务管理的信息化,使员工体验到更优秀的财务管理,管理员管理操作将更加方便,实现目…

Mysql——》数据目录

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【雕爷学编程】Arduino动手做(138)---64位WS2812点阵屏模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

解决IDEA/WebStorm的Ctrl+Shift+F冲突失效

IDEA 的 CtrlShiftF 是全文或全项目搜索搜索快捷键,非常好用。 当这个快捷键偶而会失效时,基本可以确定是快捷键冲突了。 检查所有运行的软件的快捷键,若有设置为CtrlShiftF的则改掉。特别是输入法会占用较多的快捷键。 例如我这里的搜过输…

选择合适的软件,提升工作计划效率

在快节奏的工作环境中,日程安排变得尤为重要。有许多不同的软件可用于帮助管理日程,但哪个软件最适合您的需求?在本文中,我们将介绍几种适合工作安排的软件。 1.Google Calendar Google日历是一种功能强大、易于使用且免费的日历应…

尚硅谷03:前端开发之ES | Vue_es6 Axios Node Npm

目录 内容介绍 统一异常处理 统一日志处理 前端介绍、工具使用 ES6入门 Vue入门 Vue语法 Vue语法高级 内容介绍 1、统一异常处理 2、统一日志处理(了解) 3、前端介绍 4、ES6 5、VUE入门、基本语法 6、VUE高级语法 7、axios(重点…

力扣题库刷题笔记42--接雨水(未通过)

1、题目如下&#xff1a; 2、个人Python代码实现&#xff08;部分用例超时&#xff09; 本地执行大概超过30S&#xff0c;力扣显示超时 3、个人Python代码思路&#xff1a; 当且仅当nums[i] < nums[i1]&#xff0c;nums[i] < nums[i-1]&#xff0c;此时nums[i]才能接到雨…