6.2.7 简单邮件传送协议SMTP

news2024/11/23 23:39:57

6.2.7 简单邮件传送协议SMTP

我们从一个SMTP发送的示例来了解简单邮件传送协议SMTP。

例:在主机Alpha.ARPA上的Smith发送邮件给在主机Beta.ARPA 的Jones.Green和Brown的过程。这里我们假定主机Alpha直接联系主机Beta。

Sender-SMTP和Receiver-SMTP建立了传输信道后

如图

示例

  1. 首先发送MAIL命令用以说明发信人
  2. Receiver返回OK
  3. Sender针对每个收信人发送RCPT来询问可否接收邮件
  4. Receiver两次返回OK表示收信人的邮箱是有效的,一次则返回查无此人。
  5. Sender最后发送DATA命令
  6. Receiver返回开始邮件输入命令
  7. Sender开始发送邮件数据,数据以两个回车换行以及中间一个点作为邮件的结束标记( .)。
  8. Receiver返回OK,至此邮件就存入了Jones、Green和Brown的邮箱。而Green因为在主机上没有邮箱所以就收不到邮件了。

一、SMTP命令

SMTP(RFC 821)规定了14条命令和21中应答信息。每条命令用4个字母组成,而每一种应答信息一般只有一行信息,由一个3位数字的代码开始,后面附上简单的文字说明。

如图

命令

此外SMTP服务扩展RFC 2554(1999)中增加了用于认证的EHLO和AUTH命令。

二、SMTP 通信的三个阶段

  1. TCP连接建立:连接建立是采用三次握手,在发送主机的SMTP客户和接收主机的SMTP服务器之间建立一个TCP连接。
  2. 邮件传送
  3. TCP连接释放:邮件发送完毕后,SMTP应释放TCP连接。

前面我们对邮件传送的主要过程已经了解,下面我们通过一个具体的示例了解一下用户代理和邮件服务器之间完整的邮件传送过程。

例用户使用foxmail发送一个邮件到QQ邮箱,用户代理和邮件服务器之间的邮件传送过程如下。

显然示例中Sender-SMTP是Foxmail,而em.njupt.edu.cn是Receiver-SMTP,在TCP连接建立之后开始邮件的发送过程。

三个阶段

  1. Receiver首先发来220应答码,表示邮件服务器已经准备好了。
  2. Sender标识身份,发送用户名和密码进行用户身份认证
  3. Sender发送邮件的发信人和收信人
  4. Receiver确认
  5. Sender发送DATA命令启动邮件内容的发送
  6. 结束后Receiver确认
  7. 最后Sender发送quit命令
  8. Receiver以221 Bye作为响应

三、SMTP缺点

SMTP(1982年RFC 821,2001年RFC 2821)有以下缺点

  1. RFC 822指定US-ASCII邮件首部有关的细节,邮件内容或邮件主题也只能是未加修改的US-ASCII文本;
  2. SMTP仅限于传送7位US-ASCII码数据,许多其他非英语国家的文字(如中文、俄文、甚至带重音符号的法文或德文)无法直接传送,非文本也无法传送;SMTP服务器会拒绝一行(包括尾部的CRLF行分隔符)超过1000个字符的邮件。
  3. MIME的意图是继续使用目前的邮件格式[RFC 822],但增加了邮件主体的结构,并定义了非ASCII码数据的编码规则。
  4. MIME实际上增加了SMTP的功能,并没有改动SMTP或取代它。
  5. MIME重新定义了邮件,支持文本邮件主体,使用除ASCII码之外的字符集,支持可扩展的一组不同格式的非文本邮件主体,支持多部分邮件主体,支持文本首部信息使用除ASCII码之外的字符集。

四、MIME和SMTP的关系

如图

关系

用户发送包含非ASCII码的邮件必须使用MIME定义的邮件格式,所有的非ASCII码都会被编码为ASCII码,邮件的发送仍然使用SMTP协议,使用MIME用户可以发送包含文本图片等多媒体信息及附件的邮件,MIME标准在RFC 822邮件格式基础上扩展了一些MIME邮件首部字段。

五、邮件读取协议

  1. 邮局协议POP(Post Office Protocol)是一个非常简单、但功能有限的邮件读取协议,现在使用的是它的第三个版本POP3(RFC1939)。
    1. POP也使用C/S工作方式。在接收邮件的用户PC机种必须运行POP客户程序,而在用户所连接的邮件服务器中则运行POP Server。
    2. POP3协议的特点是只要用户从POP3服务器读取了邮件,服务器就将该邮件删除。因此POP3客户程序在读取邮件后立即将邮件复制到自己的计算机中。
  2. IMAP4(INTERNET MESSAGE ACCESS PROTOCOL)协议(1996年RFC2060,2003年RFC3501)弥补了POP3协议的很多缺陷。
    1. IMAP4也使用C/S工作方式。在收邮件的用户PC机种必须运行IMAP4客户程序,而在用户所连接的邮件服务器中则运行IMAP Server。
    2. IMAP4是一个练级协议,用户在PC机上可操纵在服务器上的邮箱。当用户用客户程序打开服务器上的邮箱时,用户可以看到邮箱的首部,当用户打开指定的邮件时,该邮件才传到PC上。
    3. 与POP3不同的是,用户从IMAP4服务器读取邮件后,不会将该邮件删除,除非用户发出了删除命令。

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

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

相关文章

Hive(27): join连接查询

1 join概念回顾 根据数据库的三范式设计要求和日常工作习惯来说,我们通常不会设计一张大表把所有类型的数据都放在一起,而是不同类型的数据设计不同的表存储。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关…

FreeSwitch 1.10.9 在CentOS7.9编译spandsp,V18_MODE_5BIT_4545错误

最近FreeSwitch 1.10.9 在CentOS7.9编译mod_spandsp出问题, making all mod_spandsp make[4]: Entering directory /usr/local/src/freeswitch-1.10.9.-release/src/mod/applications/mod_spandspCC mod_spandsp_la-mod_spandsp.loCC mod_spandsp_la-udptl.loCC …

【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性

目录 一、分布式锁实现原理二、不同的分布式锁实现方案三、Redis 的 setnx 实现互斥锁四、基于 Redis 实现分布式锁初级版五、误删锁问题(业务阻塞导致)六、误删锁(Redis 命令原子性导致)(1) Lua 脚本(2) Redis 编写和执行 Lua 脚…

VSCode LSP 语言服务器协议总结

为什么使用语言服务器协议? LSP(Language Server Protocol)语言服务器是一种特殊的 Visual Studio Code 扩展,可为许多编程语言提供编辑体验。使用语言服务器,您可以实现自动完成、错误检查(诊断)、跳转到定义以及VS …

python绘制二维直方图

文章目录 histscatterhist2d histscatter 如果想描述二维数据的分布特征,那么一个直方图显然是不够用的,为此可使用两个直方图分别代表x和y方向上的分布情况,同时透过散点图查看其整体的分布特征。 下面创建一组二元高斯分布的数据&#xf…

Nature揭秘:足量提供这个营养素可激活免疫细胞对抗肿瘤

圣犹太儿童研究医院(St. Jude Childrens Research Hospital)的科学家们发现,免疫细胞和肿瘤细胞在它们的局部环境中争会夺谷氨酰胺。谷氨酰胺是一种营养物质,对抗癌活性具有重要意义。如果癌细胞垄断谷氨酰胺,则可以阻…

2023年7月广州/东莞/深圳传统行业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

单例模式:懒汉式和饿汉式

目录 懒汉模式和饿汉模式 区别 示例 懒汉模式线程不安全 懒汉模式线程安全 懒汉模式内部静态变量线程安全 饿汉式线程安全 指的是在系统生命周期内,只产生一个实例。 懒汉模式和饿汉模式 分为懒汉式和饿汉式 区别 创建时机和线程安全 线程安全&#xff1…

密码学入门——单向散列函数

文章目录 参考书一、简介二、术语介绍三、散列函数的应用四、单向散列函数的具体例子 参考书 图解密码技术,第三版 一、简介 单向散列函数(One-way Hash Function)是一种将任意长度的输入数据映射为固定长度输出的函数。该函数通常被用于密…

asyncio.run() cannot be called from a running event loop

这个问题一般在jupyter中出现 搜到的解决方法也不怎么好用 知道看到了这个评论 很感谢 # pip install nest_asyncio首先安装此模块 import nest_asyncio#调用 nest_asyncio.apply()成功解决

如何整合spring cloud常用组件?

目录 一、SpringCloud Alibaba 简介 1、简介 2、为什么使用 3、版本选择 4、项目中的依赖 二、SpringCloud Alibaba-Nacos[作为注册中心] 1、下载 nacos-server 2、启动 nacos-server 3、将微服务注册到 nacos 中 三、SpringCloud Alibaba-Nacos[作为配置中心] 四、…

天猫精灵狄耐克联合研发新品, 携手打造智慧居家新体验

2023年6月28日,以“以Ai相伴,智慧赋能”为主题的2023厦门人工智能产业高峰论坛,在素有“中国软件特色名城”美誉的厦门隆重举行。 2023厦门人工智能产业高峰论坛现场 厦门狄耐克智能科技股份有限公司与阿里巴巴智能互联成为战略合作伙伴&…

智能抄表建设方案

城市基础设施改造是智慧城市升级建设的基础。如供水,水资源是人类生存发展和经济社会可持续发展的重要基础。然而,传统的人工抄表方式已经无法满足水资源管理和水务公司对高效、准确抄表管理的需求。由于人工抄表工作的不便捷性、耗时长和易出错性&#…

全方位对比 Postgres 和 MySQL (2023 版)

根据 2023 年 Stack Overflow 调研,Postgres 已经取代 MySQL 成为最受敬仰和渴望的数据库。 随着 Postgres 的发展势头愈发强劲,在 Postgres 和 MySQL 之间做选择变得更难了。 如果看安装数量,MySQL 可能仍是全球最大的开源数据库。 Postgre…

Jmeter接口关联(四)【使用正则表达式提取值】关联上下接口实际当中的运用

文章目录 前言一、Jmeter中正则表达式的运用(使用案例讲解)注意 前言 这篇主要是用一个实际的例子讲解正则表达式在2个有关联的接口中运用。 天气预报接口: 请求Key:79a35e2a5997710f3bdc86de81f21dbb 根据城市查询天气 接口地…

【missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun】

报错信息 安装xcode xcode-select --install 打开跳板效率会更高。

【Matlab】智能优化算法_人工蜂鸟算法AHA

【Matlab】智能优化算法_人工蜂鸟算法AHA 1.背景介绍2.数学模型2.1 初始化2.2 指导觅食2.3 领地觅食2.4 迁徙觅食 3.文件结构4.伪代码5.详细代码及注释5.1 AHA.m5.2 BenFunctions.m5.3 FunRange.m5.4 main.m5.5 SpaceBound.m 6.运行结果7.参考文献 1.背景介绍 蜂鸟是一种令人惊…

Java实现站内信

假如后台某个任务比较耗时,这时就需要任务完成时,通知一下用户,如下图,实现站内信的效果 两张表即可实现 t_message_content内容表 CREATE TABLE t_message_content (c_id int(11) NOT NULL AUTO_INCREMENT COMMENT 消息的id,se…

SpringCloud(4) Eureka 如何主动下线服务节点

目录 1.直接停掉客户端服务2.发送HTTP请求1)调用DELETE接口2)调用状态变更接口 3.客户端主动通知注册中心下线1)代码示例2)补充3)测试 一共有三种从 Eureka 注册中心剔除服务的方式: 1.直接停掉客户端服务…

多个input相加计算结果为NaN的处理

为什么会出现NaN?(复现一下) NaN的出现:是因为input框绑定的都是同一个方法导致的。 因为我的需求:购买数量*优惠价(单价)-平台补贴-店铺补贴实付金额 的实时计算 原因:第一个input输入的时候,相应的其…