Att SMTP 服务器 - SMTP 协议

早在 20 世纪 60 年代,电子邮件就以这样或那样的形式出现了。但直到 1982 年 8 月,信息科学研究所发布了《简单邮件传输协议》(SMTP;RFC 821),才提出了收发电子邮件的标准化方法。

SMTP 很快在 ARPANET 上流行起来,取代了从一台大型机向另一台大型机传送邮件所使用的更为复杂的旧方法,并于 1982 年底首次由 BSD 4.1c 中的早期邮件传输代理 Sendmail 提供支持。.
从那时起,该协议定期进行修订和扩展,但发送邮件的基本方法基本保持不变。.

该协议是一个基于文本的协议,最初不支持二进制数据的传输。不过,基于文本的协议易于实施和维护。80 年代末,MIME(多用途互联网邮件扩展)开始流行,用于通过 SMTP 编码和发送二进制数据。如今,SMTP 已成为互联网上发送和接收电子邮件的主要协议,任何网络管理员都必须掌握该协议的相关知识。.

由于 SMTP 以文本为基础,因此学习该协议比学习许多其他协议要容易得多,只需一个能通过 TCP/IP 端口 25 发送 ASCII 数据的程序(如 Telnet),就能与 SMTP 服务器直接通信。.

通过 SMTP 发送邮件是在一个事务中进行的,也就是说,如果邮件的发送没有全部完成,也没有产生错误,邮件就会被丢弃。RFC 821 将事务描述为三个阶段:指定发件人、提供一个或多个收件人,然后发送邮件。不过,把 SMTP 事务看作 5 个阶段更容易理解:

  • 握手
  • 发送回复地址
  • 发送收件人
  • 发送信息数据
  • 结束交易

握手

在连接到 25 端口的 SMTP 服务器时,信息发送方必须等待接收方接受连接,并按以下格式表明自己的身份:

220 [域] [服务信息]
示例:220 example.com 服务准备就绪

然后,发送方必须使用 HELO 命令向接收方表明自己的身份。.

HELO [域]
示例:HELO example.com

邮件服务器希望每个服务器都使用域名来标识自己的身份,这可以通过执行 MX 记录查询来验证服务器的身份:

250 [信息]
示例: 250 example.com 你好,bob 在 example.com

回复代码 250 是 SMTP 服务器发出的通用 ‘OK ’回复,表示上次操作已成功完成。.

发送回复地址:

一旦两个服务器完成握手,SMTP 交易就开始了,我们就可以开始向服务器发送命令。如果您想查看服务器所支持的命令,请发送 HELP 命令,SMTP 服务器会回复一条信息,详细说明支持哪些命令。.

要向该服务器上的用户发送邮件,我们必须先设置一个回复地址。必须先提供回复地址,以便在 SMTP 交易过程中出现任何错误时可以向该地址报告。为此,我们使用 ‘MAIL FROM: ’命令:

邮寄地址:
示例:MAIL FROM:

注意小于和大于字符。RFC 821 要求这些字符包含电子邮件地址本身。如果地址被接受,SMTP 将返回 250 OK 回复。.

发送收件人

设置回复地址后,SMTP 将允许我们识别邮件的收件人。为此,我们使用 ‘RCPT TO: ’命令:

RCPT TO:
示例:RCPT TO:

要设置多个收件人,只需对每个收件人重复此命令即可。如果收件人接受了该用户的邮件,并且此时可以接受邮件,则应回复 250 OK。如果收件人不接受该用户的邮件,则会发送 550 失败回复或相应的错误代码。如果收到 250 OK 回复,我们就可以继续发送邮件数据。.

发送信息数据

通过 SMTP 发送数据非常简单,但信息格式可能相当复杂,尤其是在发送二进制附件时。要开始发送数据,我们应发出 ‘DATA ’命令,服务器应回复 354 中间回复:

354 输入信息,以“. ”结尾,单独一行

我们可以发送的最简单的信息是纯文本信息,它不需要使用多部分 MIME 信息格式。所有信息,不管是纯文本还是其他信息,都是通过发送一行仅包含句点的字符来结束的。此外,在发送信息之前,您还可以发送一些标题信息,如日期、主题、收件人、抄送人和发件人。.

例如

数据
354 输入信息,以“. ”结尾,单独一行
主题:这是计划短信的主题行
这就是纯文本信息的正文。.

如果接受,SMTP 服务器将返回 250 OK 回复,如果交易失败或不完整,则返回错误代码。请注意报文正文行尾的句号字符,只有当在某一行发现句号字符时,服务器才会停止监听数据。如果发送方服务器发送的报文会导致数据会话过早关闭,那么在报文包含一个句点字符的一行中,应在该行中添加一个额外的句点字符。.

结束交易

在此之前发送到接收 SMTP 服务器的所有信息都将被视为一次性信息。如果在连接关闭前没有发送 ‘QUIT’(退出)命令,目标服务器将直接删除已存储的邮件数据。QUIT 命令最初是用来优雅地关闭连接的,现在通常用来表示交易已完成,许多邮件服务器都会等待 QUIT 命令,然后再将邮件排队等待消息传输代理路由。发送 QUIT 命令后,目标服务器应发送 221 回复,以确认交易已完成,连接正在关闭。.

如果您正在学习 SMTP 协议,建议您阅读 RFC 821、2476 和 2554。尤其是在阅读 RFC 821 时,您应该记住,自 1982 年以来,电子邮件服务器已经发生了很大变化,部分原因是垃圾邮件发送者的滥用。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

众所周知,拥有一个可靠的 SMTP 服务器是正确发送电子邮件的关键。同样众所周知的是,没有人再提供不带验证或开放式中继的 SMTP 服务。但你仍然可以免费获得一个高质量的 SMTP 服务器供你使用!

单击此处获取免费 SMTP 服务器