热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

电子邮件传输协议原理简介

1、简介   SMTP(SimpleMailTransferProtocol)协议是为了保证电子邮件的可靠和高效传送。TCPIP协议的应用层中包含有SMTP协议,但事实上其与传输系

1、简介

      SMTP(Simple Mail Transfer Protocol)协议是为了保证电子邮件的可靠和高效传送。TCP/IP 协议的应用层中包含有 SMTP 协议,但事实上其与传输系统和机制无关,仅要求一个可靠的数据流通道。该协议可以工作在 TCP 上,也可以工作在 NCP、NITS 等协议上。在 TCP 上,其使用端口 25 进行传输。SMTP 的一个重要特点是可以在可交互的通信系统中转发邮件。
      SMTP 提供了一种邮件传输的机制,当接收方和发送方都在一个网络上时,可以把邮件直传给对方;当双方不在同一个网络上时,需要通过一个或几个中间服务器转发。SMTP 首先由发送方提出申请,要求与接收方 SMTP 建立双向的通信渠道,接收方可以是最终收件人也可以是中间转发的服务器。接收方服务器确认可以建立连接后,双发就可以开始通信。
      发送方 SMTP 向接收方发出 MAIL 命令,告知发送方的身份;如果接收方接受,就会回答 OK。发送方再发出 RCPT 命令,告知收件人的身份,接收方 SMTP 确认是否接收或转发,如果同意就回答 OK;接下来就可以进行数据传输了。通信过程中,发送方 SMTP 与接收方 SMTP 采用对话式的交互方式,发送方提出要求,接收方进行确认,确认后才进行下一步的动作。整个过程由发送方控制,有时需要确认几次才可以(如图 1 所示)。

《电子邮件传输协议原理简介》

      为了保证回复命令的有效,SMTP 要求发送方必须提供接收方的服务器及邮箱。邮件的命令和答复有严格的语法定义,并且回复具有相应的数字代码。所有的命令由 ASCII 码组成。命令代码是大小写无关的,如 MAIL 和 mail、mAIL 都是等效的。
      目前使用的 SMTP 协议是存储转发协议,意味着其允许邮件通过一系列的服务器发送到最终目的地。服务器在一个队列中存储到达的邮件,等待发送到下一个目的地。下一个目的地可以是本地用户,或者是另一个邮件服务器,如图 2 所示。如果下游的服务器暂时不可用,MTA 就暂时在队列中保存信件,并在以后尝试发送。

《电子邮件传输协议原理简介》


2、命令

      SMTP 定义了 15 个命令,分别是:HELO、MAIL FROM、RCPT TO、DATA、RSET、SEND FROM、SOML FROM、SAML FROM、VRFY、EXPN、HELP、NOOP、QUIT、TURN。其中 SMTP 工作的基本的命令有 7 个:HELO、MAIL FROM、RCPT TO、DATA、REST、NOOP 和 QUIT。
      下面分别对这些命令进行介绍。
      HELO:发送方问候接收方,后面是发件人的服务器地址或标识。接收方回答 OK 时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。
      MAIL FROM:这个命令用来开始传送邮件,其后面跟随发送方邮件地址(返回邮件地址)。也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发送方的地址应是被对方或中间转发方同意接受的。这个命令会清空有关的缓冲区,为新的邮件做准备。
      RCPT TO:这个命令告诉接收方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,其必须报 550 错误代码通知发送方。如果服务器同意转发,其要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。
      DATA:接收方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是“.”的行结束数据。结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。如果传送接受,接收方回复 OK。
      REST:这个命令用来通知接收方复位,所有已存入缓冲区的收件人数据,发件人数据和待传送的数据都必须清除,接收方必须回答 OK。
      NOOP:这个命令不影响任何参数,只是要求接收放回答 OK,不会影响缓冲区的数据。
      QUIT:SMTP 要求接收方必须回答 OK,然后中断传输;在收到这个命令并回答 OK 前,接收方不得中断连接,即使传输出现错误。发送方在发出这个命令并收到 OK 答复前,也不得中断连接。
      VERY:用于确认接收用户。
      SEND:使接收主机知道消息必须送到另一个终端,当前传输被取消。
      HELP:查询服务器支持的命令集合。
      EXPN:验证给定的邮箱列表是否存在,并扩充邮箱列表。
      TURN:请求接收主机向发送主机返回消息。
      SAML:发送并邮寄。通知接收主机消息必须发送到其他终端和邮箱。


参考文献:http://www.ibm.com/developerworks/cn/linux/1304_liyang_mailsecure1/


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
author-avatar
丁木China
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有