【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

本文主要是介绍【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第33章      SMTP简单邮件传输协议基础知识

本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作。

(本章的知识点主要整理自网络)

33.1  初学者重要提示

33.2  SMTP基础知识参考资料

33.3  SMTP基础知识点

33.4  总结

 

 

33.1  初学者重要提示

SMTP简单邮件传输协议在实际项目中有一些实用价值,需要初学者对SMTP的基础知识也有个认识。

 

33.2  SMTP基础知识参考资料

大家可以从以下地址获得SMTP基础知识:

  • wiki百科中文版SMTP:地址链接(这个是超链接)
  • wiki百科英文版SMTP:地址链接(这个是超链接)
  • 百度百科SMTP:地址链接(这个是超链接)

对于初学者来说,学习上面三个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍。

 

33.3  SMTP基础知识点

(这里的知识点整理自上面的参考资料地址)

教程这里也对SMTP的基础知识做个介绍,方便大家先有个大概的认识。

 

33.3.1 SMTP简要说明

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个端:在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。

SMTP协议与人们面对面交互的礼仪之间有许多相似之处。首先,运行在发送端邮件服务器主机上的SMTP客户,发起一个到运行在接收端邮件服务器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。SMTP客户和服务器先执行一些应用层握手操作。就像人们在转手东西之前往往先自我介绍那样,SMTP客户和服务器也在传送信息之前先自我介绍一下。在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。

 

33.3.2 SMTP定义

SMTP是一种TCP协议支持的提供可靠的电子邮件传输的应用层协议。SMTP是建立在TCP上的一种邮件服务,主要用于传输系统之间的邮件信息。

SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一条 IP 地址。

SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange)DNS。

在八十年代早期SMTP开始被广泛地使用。当时,它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反,SMTP在发送和接收的机器始终连接在网络的情况下工作得最好。

Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP实现为一个客户端(消息的发送者)或一个服务器(消息的接收者)。一些其他流行的SMTP服务器程序包括了Philip Hazel的exim,IBM的Postfix,D. J. Bernstein的Qmail,以及Microsoft Exchange Server。

由于这个协议开始是基于纯ASCII文本的,它在二进制文件上处理得并不好。诸如MIME的标准被开发来对二进制文件进行编码以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。

SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。

 

33.3.3 SMTP工作过程

SMTP是一种基于文本的电子邮件传输协议,是用于邮件服务器之间交换邮件的协议。SMTP是应用层的服务,可以适应于各种网络系统。

SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。响应信息一般只有一行。

SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为:

  1. 建立TCP连接。
  2. 客户端向服务器发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
  3. 服务器端以OK作为响应,表示准备接收。
  4. 客户端发送RCPT命令。
  5. 服务器端表示是否愿意为收件人接收邮件。
  6. 协商结束,发送邮件,用命令DATA发送输入内容。
  7. 结束此次发送,用QUIT命令退出。

SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能。通过邮件传输代理程序(MTA)将邮件传送到目的地。

 

33.3.4 SMTP通讯举例

在发送方(客户端)和接收方(服务器)间创建连接之后,接下来是一个合法的SMTP会话。在下面的对话中,所有客户端发送的都以“C:”作为前缀,所有服务器发送的都以“S:”作为前缀。在多数计算机系统上,可以在发送的机器上使用telnet命令来创建连接,比如:

telnet www.example.com 25

通过这个命令,打开计算机到主机www.example.com的SMTP连接。

S: 220 www.example.com ESMTP PostfixC: HELO mydomain.comS: 250 Hello mydomain.comC: MAIL FROM: <sender@mydomain.com>S: 250 OkC: RCPT TO: <friend@example.com>S: 250 OkC: DATAS: 354 End data with <CR><LF>.<CR><LF>C: Subject: test messageC: From:""< sender@mydomain.com>C: To:""< friend@example.com>C:C: Hello,C: This is a test.C: Goodbye.C: .S: 250 Ok: queued as 12345C: quitS: 221 Bye

虽然是可选的,但几乎所有的客户端都会使用EHLO问候消息(而不是上面所示的HELO)来询问服务器支持何种SMTP扩展,邮件的内容一般是典型的MIME格式。

 

33.3.5 垃圾邮件

最初,SMTP的局限之一在于它没有对发送方进行身份验证的机制。因此,后来定义了SMTP-AUTH扩展。

尽管有了身份认证机制,垃圾邮件仍然是一个主要的问题。但由于庞大的SMTP安装数量,大刀阔斧地修改或完全替代SMTP被认为是不现实的。Internet Mail 2000就是一个替代SMTP的建议方案。

因此,出现了一些同SMTP工作的辅助协议。IRTF的反垃圾邮件研究小组正在研究一些建议方案,以提供简单、灵活、轻量级的、可升级的源端认证。最有可能被接受的建议方案是发送方策略框架协议。

 

33.4 总结

本章节就为大家讲解这么多,更多SMTP协议的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。

 

这篇关于【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502801

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO