什么是简单邮件传输协议(SMTP)?

简单邮件传输协议(SMTP)是一种通过网络传输电子邮件的技术标准。

学习目标

阅读本文后,您将能够:

  • 说明简单邮件传输协议(SMTP)如何工作
  • 了解 SMTP 命令,服务器和信封
  • 定义扩展 SMTP(SMTP)

相关内容


想要继续学习吗?

欢迎注册以接收来自 Cloudflare 的安全学习文章。

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是简单邮件传输协议(SMTP)?

简单邮件传输协议(SMTP)是一种通过网络传输电子邮件(email)的技术标准。与其他网络协议一样,SMTP 允许计算机和服务器交换数据,无论其底层硬件或软件是什么。正如使用信封地址书写的标准化格式允许邮政服务得以运作一样,SMTP 标准化电子邮件从发件人到收件人的传输方式,使广泛的电子邮件传递成为可能。

SMTP 是一种邮件传递协议,而非邮件检索协议。邮政服务将邮件传递到邮箱,但收件人仍然必须从邮箱中提取邮件。同样,SMTP 将电子邮件传递到某个电子邮件提供商的邮件服务器,但需要使用其他协议来从邮件服务器检索该电子邮件,以便收件人读取邮件。

SMTP 如何工作?

所有网络协议都遵循一个预定义的数据交换过程。SMTP 定义了一个在电子邮件客户端和邮件服务器之间交换数据的过程。电子邮件客户端是用户与之交互的对象:计算机或 Web 应用程序,用户可以在其中访问和发送电子邮件。邮件服务器是用于发送、接收和转发邮件的专用计算机;用户不会与邮件服务器直接进行交互。

下面概述邮件客户端和邮件服务器开始发送邮件时所传递的内容:

  • SMTP 连接打开:由于SMTP使用传输控制协议(TCP)作为传输协议,因此第一步从客户端和服务器之间建立 TCP 连接开始。接下来,电子邮件客户端以一个专门的“Hello”命令(HELO or EHLO,如下所述)开始电子邮件发送过程。
  • 电子邮件数据传递:客户端向服务器发送一系列带有邮件实际内容的命令:邮件头(包括目的地和主题行)、邮件正文以及任何其他组件。
  • 邮件传送代理(MTA):服务器运行一个称为邮件传送代理(MTA)的程序。MTA 检查收件人的电子邮件地址,如果该地址不同于发件人地址,则查询域名系统(DNS)以找到收件人的 IP 地址。这个过程好比邮局查找邮件收件人的邮政编码。
  • 连接关闭:客户端在数据传输完成时通知服务器,服务器关闭连接。此时,服务器将不会从客户端接受任何额外电子邮件数据,除非客户端打开新的 SMTP 连接。

通常情况下,上述第一个电子邮件服务器不是实际电子邮件的最终目的地。该服务器收到客户端发来的邮件后,会与另一个邮件服务器重复此 SMTP 连接过程。第二个服务器也进行同样的操作,直到电子邮件最终到达收件人的收件箱,其位于收件人电子邮件提供商控制的邮件服务器上。

这个过程好比邮件从发件人传送到收件人的方式。邮差不会直接将信件从发件人送到收件人手上。实际上,邮差会将信件带回邮局。邮局将信件运送到另一个城镇的邮局,然后是另一个,如此重复,直至信件到达收件人。同样,电子邮件通过 SMTP 协议从一个服务器传送到另一个服务器,直至到达收件人的收件箱。

什么是 SMTP 信封?

SMTP “信封”是客户端发送给邮件服务器的一组信息,说明电子邮件来自何处和将前往何处。SMTP 信封不同于电子邮件头和正文,对电子邮件收件人不可见。

什么是 SMTP 命令?

SMTP 命令是预定义的基于文本的指令,它告诉客户端或服务器要采取什么操作及如何处理任何伴随的数据。将它们想象为客户端可以按下的按钮,以便使服务器能正确接收数据。

  • HELO/EHLO:这些命令发出 “Hello” 并在客户端和服务器之间启动 SMTP 连接。“HELO” 是该命令的基本版本;“EHLO” 用于一种特别类型的 SMTP。
  • MAIL FROM:这个命令告诉服务器谁在发送该电子邮件。如果 Alice 试图给她的朋友 Bob 发电子邮件,客户端可能会发送 “MAIL FROM:<[email protected]>”。
  • RCPT TO:这个命令用于列出电子邮件的收件人。如果有多个收件人,客户端可多次发送该命令。如上例子中,Alice 的电子邮件客户端将发送: “RCPT TO: <[email protected]>"。
  • DATA:这个命令放在电子邮件的内容前,例如:

DATA
Date: Mon, 4 April 2022
From: Alice [email protected]
Subject: Eggs benedict casserole
To: Bob [email protected]

Hi Bob,
I will bring the eggs benedict casserole recipe on Friday.
-Alice
.
  • RSET:该命令重置连接,删除所有以前传输的信息,但不关闭 SMTP 连接。RSET 在客户端发送了错误信息的情况下使用。
  • QUIT:结束连接。

什么是 SMTP 服务器?

SMTP服务器是通过 SMTP 协议发送和接收电子邮件的邮件服务器。电子邮件客户端直接与电子邮件提供商的 SMTP 服务器连接,以开始发送电子邮件。SMTP 服务器中运行几个不同的软件:

  • 邮件提交代理(MSA): MSA 接收来自电子邮件客户端的电子邮件。
  • 邮件传送代理(MTA): 将邮件传送到传递链中的下一个服务器。如上所述,如有需要,它可能查询 DNS 以找到收件人所属域的邮件交换(MX)DNS 记录。
  • 邮件传递代理(MDA): 从 MTA 接收电子邮件并存储在收件人的电子邮件收件箱中。

SMTP 使用什么端口?

在网络中,端口是接收网络数据的虚拟点;可将其比作邮件地址中的公寓号码。端口帮助计算机将网络数据分拣到正确的应用程序。网络安全措施(例如防火墙)可堵塞不必要的端口,以预防发送和接收恶意数据。

过去,SMTP 仅使用端口 25。今天,SMTP 依然使用端口 25,但也可以使用端口 465、587 和2525

  • 端口 25 是 SMTP 服务器之间连接最常用的端口。如今,终端用户网络的防火墙通常会阻止这个端口,因为垃圾邮件发送者试图滥用它来发送大量垃圾邮件。
  • 端口 465 曾经专门用于具备安全套接字层(SSL)加密的 SMTP。但 SSL 已被Transport Layer Security(TLS)取代,因而现代电子邮件系统不再使用这个端口。该端口仅出现在传统(过时)系统中。
  • 端口 587 现在是电子邮件提交的默认端口。经过该端口的 SMTP 通信使用 TLS 加密。
  • 端口 2525 与 SMTP 没有正式关联,但某些电子邮件服务在上述端口被堵塞的情况下,通过这个端口提供 SMTP 传输。

SMTP 对比 IMAP 和 POP

互联网消息访问协议 (IMAP) 和邮局协议 (POP) 用于将电子邮件发送到最终目的地。电子邮件客户端必须从传送链中的最后一个邮件服务器检索电子邮件,才能将其显示给用户。为此目的,客户端使用 IMAP 或 POP 协议,而非 SMTP。

要理解 SMTP 和 IMAP/POP 之间的差异,可以想象一下木板和绳子的不同之处。一块木板可将某物向前推,但不能将它拉回来。绳子可以拉动某物,但不能推动它。同样,SMTP 将电子邮件“推”到邮件服务器,而 SMTP 和 POP 将它“拉”到用户的应用程序中。

什么是扩展 SMTP(ESMTP)?

扩展简单邮件传输协议(ESMTP)是该协议的一个版本,扩展了原有功能,支持发送电子邮件附件、使用 TLS 及其他能力。几乎所有电子邮件客户端和电子邮件服务都使用 ESMTP,而非基本的 SMTP。

ESMTP 有一些额外的命令,包括 “EHLO”(即“扩展的 hello”)消息,实现从连接开始时使用 ESMTP。

什么是 Cloudflare Email Routing?

Cloudflare Email Routing 旨在简化创建和管理电子邮件地址,而无需关注额外的邮箱。通过 Email Routing,用户能创建任何数量的自定义电子邮件地址,以便在不希望分享其主要电子邮件地址的情况下使用。然后电子邮件会被路由到其首选的电子邮件收件箱,无需暴露其主要电子邮件地址。

Cloudflare Email Routing 的工作方式是修改电子邮件的 SMTP 信封,但邮件头和正文保持不变。要了解更多信息,请阅读我们的博客文章