使用 Telnet 测试 Exchange 服务器上的 SMTP 通信

可以使用 Telnet 测试消息传送服务器之间的简单邮件传输协议 (SMTP) 通信。 SMTP 是用于从一台消息传送服务器向另一台消息传送服务器发送电子邮件的协议。 如果在发送或接送邮件时遇到问题,使用 Telnet 可能会很有帮助,因为可以将 SMTP 命令手动发送到消息传送服务器。 反过来,服务器将回复响应,响应会在典型连接中返回。 有时,这些结果能帮助用户了解为什么无法发送或接收邮件。

可以使用 Telnet 测试 SMTP 通信,从而:

  • 测试从 Internet 到 Exchange 组织的邮件流。

  • 测试从 Exchange 到 Internet 上的其他消息传送服务器的邮件流。

提示

你知道吗?可以使用 Microsoft 远程连接分析器 https://testconnectivity.microsoft.com/,而不是使用 Telnet 测试 SMTP 连接? 使用远程连接分析器,可以选择想要执行的连接测试(在本例中为入站 SMTP Email),并按照显示的说明进行操作。 它将引导你完成需要输入的信息,为你运行测试,然后提供结果。 试一试!

在开始之前,您需要知道什么?

  • 估计完成时间:15 分钟

  • Exchange 权限不适用于本主题介绍的过程。 这些过程是在 Exchange 服务器或客户端计算机的操作系统中执行。

  • 本主题演示如何使用 Windows 附带的 Telnet 客户端。 第三方 Telnet 客户端需要的语法可能与本主题中所示的不同。

  • 本主题中的步骤演示了如何使用 TCP 端口 25 连接到允许匿名连接的面向 Internet 的服务器。 如果尝试从 Internet 连接到此服务器,则需要确保可以通过 TCP 端口 25 从 Internet 访问 Exchange 服务器。 同样,如果尝试从 Exchange 服务器访问 Internet 上的服务器,则需要确保 Exchange 服务器可以通过 TCP 端口 25 打开与 Internet 的连接。

  • 用户可能会注意到一些使用 TCP 端口 2525 的接收连接器。 这些是内部接收连接器,不用于接受匿名 SMTP 连接。

  • 如果要测试远程消息传送服务器上的连接,应该在 Exchange 服务器上运行本主题中的步骤。 通常会对远程消息传送服务器进行设置,以确保 SMTP 连接来自其中的 IP 地址与发件人的电子邮件地址中的域匹配。

  • 若要了解本主题中的过程可能适用的键盘快捷键,请参阅 Exchange 管理中心内的键盘快捷键

提示

是否有任何疑问? 请在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange OnlineExchange Online Protection

步骤 1:在计算机中安装 Telnet 客户端

在大多数版本的 Windows 上,需要在使用之前安装 Telnet 客户端。 要安装它,请参阅 Install Telnet Client(安装 Telnet 客户端)。

步骤 2:查找目标 SMTP 服务器的 FQDN 或 IP 地址

若要在端口 25 上使用 Telnet 连接到 SMTP 服务器,需要使用完全限定的域名 (FQDN) (例如,mail.contoso.com) 或 SMTP 服务器的 IP 地址。 如果不知道 FQDN 或 IP 地址,可以使用 Nslookup 命令行工具查找目标域的 MX 记录。

注意

网络策略可能会阻止用户使用 Nslookup 工具在 Interent 上查询公共 DNS 服务器。 作为替代方法,可以在 Internet 上使用其中一个免费提供的 DNS 查找或 MX 记录查找网站。

  1. 在命令提示符下,键入 nslookup,然后按 Enter。 此命令将打开 Nslookup 会话。

  2. 键入 set type=mx,然后按 Enter。

  3. 键入要查找其 MX 记录的域名。 例如,若要查找 fabrikam.com 域的 MX 记录,请键入 fabrikam.com.,然后按 Enter。

    注意

    使用尾随句点 ( . ) 时,可以防止无意中向域名添加任何默认的 DNS 后缀。

    命令输出如下所示:

    fabrikam.com mx preference=10, mail exchanger = mail1.fabrikam.com
    fabrikam.com mx preference=20, mail exchanger = mail2.fabrikam.com
    mail1.fabrikam.com internet address = 192.168.1.10
    mail2 fabrikam.com internet address = 192.168.1.20
    

    可以将与 MX 记录关联的任何主机名或 IP 地址用作目标 SMTP 服务器。 较低的首选项值(首选项 = 10 与 20)表示首选 SMTP 服务器。 多个 MX 记录和不同的首选项值用于实现负载均衡和容错。

  4. 准备好结束 Nslookup 会话时,键入 exit,然后按 Enter。

步骤 3:在端口 25 上使用 Telnet 测试 SMTP 通信

在此示例中,我们将使用下面的值。 在服务器上运行命令时,将这些值替换为组织的 SMTP 服务器、域等的值。

  • 目标 SMTP 服务器:mail1.fabrikam.com
  • 源域:contoso.com
  • 发件人的电子邮件地址: chris@contoso.com
  • 收件人的电子邮件地址: kate@fabrikam.com
  • 邮件主题:从 Contoso 进行测试
  • 消息正文:这是一条测试消息

提示

Telnet 客户端中的命令不区分大小写。 为清楚起见,本示例中的 SMTP 命令动词均使用大写。 连接目标 SMTP 服务器后,无法在 Telnet 会话中使用 Backspace 键。 如果在键入 SMTP 命令时出错,需要按 Enter,然后重新键入命令。 无法识别的 SMTP 命令或语法错误会导致如下所示的错误消息: 500 5.3.3 Unrecognized command

  1. 打开命令提示符窗口,键入 telnet,然后按 Enter。

    此命令将打开 Telnet 会话。

  2. 键入 set localecho,然后按 Enter。

    借助此 可选命令,可以一边键入字符,一边查看这些字符。对于某些 SMTP 服务器,可能需要这样设置。

  3. 键入 set logfile <filename>,然后按 Enter。

    可选命令可以进行日志记录,并指定 Telnet 会话的日志文件。 如果仅指定了文件名,则日志文件位于当前文件夹。 如果指定了路径和文件名,该路径需要位于本地计算机中,并且可能需要以 Windows DOS 8.3 格式(无空格的简称)输入路径和文件名。 该路径必须存在,但会自动创建日志文件。

  4. 键入 OPEN mail1.fabrikam.com 25,然后按 Enter。

  5. 键入 EHLO contoso.com,然后按 Enter。

  6. 键入 MAIL FROM:<chris@contoso.com>,然后按 Enter。

  7. 键入 RCPT TO:<kate@fabrikam.com> NOTIFY=success,failure,然后按 Enter。

    可选的 NOTIFY 命令可指定特定的传递状态通知 (DSN) 邮件(也称为退回邮件、未送达报告或 NDR),该邮件需要提供 SMTP。 在本例中,要查询有关邮件传递成功或失败的 DSN 邮件。

  8. 键入 DATA,然后按 Enter。

  9. 键入 Subject: Test from Contoso,然后按 Enter。

  10. 再次按 Enter 键。

    Subject: 字段和邮件正文之间需要空白行。

  11. 键入 This is a test message,然后按 Enter。

  12. () . 键入句点,然后按 Enter。

  13. 若要断开与 SMTP 服务器的连接,请键入 QUIT,然后按 Enter。

  14. 若要关闭 Telnet 会话,请键入 quit,然后按 Enter。

下面介绍了使用上述步骤执行的成功会话,如下所示:

C:\Windows\System32> telnet
Microsoft Telnet> set localecho
Microsoft Telnet> set logfile c:\TelnetTest.txt
Microsoft Telnet> OPEN mail1.fabrikam.com 25
220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at Fri, 5 Aug 2016 16:24:41 -0700
EHLO contoso.com
250-mail1.fabrikam.com Hello [172.16.0.5]
250-SIZE 37748736
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 XRDST
MAIL FROM: <chris@contoso.com>
250 2.1.0 Sender OK
RCPT TO: <kate@fabrikam.com> NOTIFY=success,failure
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
Subject: test

This is a test message.
.
250 2.6.0 <c89b4fcc-3ad1-4758-a1ab-1e820065d622@mail1.fabrikam.com> [InternalId=5111011082268, Hostname=mail1.fabrikam.com] Queued mail for delivery
QUIT
221 2.0.0 Service closing transmission channel

步骤 4:Telnet 会话中的成功和错误消息

针对以上示例中所使用的命令,本节提供有关命令的成功和失败响应的信息。

注意

RFC 5321 中定义的三位数 SMTP 响应代码对所有 SMTP 消息传送服务器都一样,但响应中的文本说明可能略有不同。

SMTP 回复代码

SMTP 服务器采用 x.y.z 的格式,用多种数字回复代码响应命令,其中:

  • X 表示命令是好、坏还是不完整。
  • Y 表示发送的响应的类型。
  • Z 提供了有关命令的其他信息

由打开连接的服务器接收响应后,它可以辨别远程服务器已接受命令并准备好接受下一个命令,还是发生了错误。

理解第一个数字 (X) 尤为重要,因为它指示发送的命令是成功还是失败。 以下是可能的值及其含义。

回复代码 含义
2.y.z 发送的命令在远程服务器上成功完成。 远程服务器已准备好接受下一个命令。
3.y.z 命令已接受,但远程服务器需要更多信息才能完成此操作。 发送服务器需要发送一个包含所需信息的新命令。
4.y.z 由于可能是临时命令的原因,命令未被远程服务器接受。 发送服务器稍后应再次尝试连接,查看远程服务器是否可以成功接受命令。 发送服务器将继续重试连接,直到完成成功连接(由 2.y.z 代码表示)或永久失败(由 5.y.z 代码表示)。
一个出现临时错误的示例是,远程服务器上的存储空间不足。 可用空间增加后,远程服务器应该能够成功地接受命令。
5.y.z 由于不可恢复的原因,远程服务器未接受该命令。 发送服务器将不会重试连接,并将把未送达报告重新发回给发送邮件的用户。
一个出现不可恢复错误的示例是,将邮件发送到不存在的电子邮件地址。

上表基于的是 RFC 5321(简单邮件传输协议),4.2.1 部分 所提供的信息。 其他信息(包括对 SMTP 回复代码的第二位数 (Y) 和第三位数 (Z) 的说明)包含在本部分,以及 4.2.24.2.3 部分中。

OPEN 命令

成功的响应220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at <day-date-time>

失败响应Connecting to mail1.fabrikam.com...Could not open connection to the host, on port 25: Connect failed

失败的可能原因

  • 目标 SMTP 服务不可用。
  • 对目标防火墙有所限制。
  • 对源防火墙有所限制。
  • 目标 SMTP 服务器的 FQDN 或 IP 地址不正确。
  • 端口号不正确。

EHLO 命令

成功的响应250 mail1.fabrikam.com Hello [<sourceIPaddress>]

失败响应501 5.5.4 Invalid domain name

失败的可能原因

  • 域名中存在无效字符。
  • 目标 SMTP 服务器上存在连接限制。

注意

EHLO 是 RFC 5321 中定义的已扩展简单邮件传输协议 (ESMTP) 动作。 ESMTP 服务器可在初始连接时公布其功能。 这些功能包括其可接受的邮件大小上限,以及支持的身份验证方法。 HELO 是 RFC 821 中定义的旧版 SMTP 动作。 大多数 SMTP 消息传送服务器均支持 ESMTP 和 EHLO。 如果尝试连接的非 Exchange 服务器不支持 EHLO,则可以改用 HELO。

MAIL FROM 命令

成功的响应250 2.1.0 Sender OK

失败响应550 5.1.7 Invalid address

可能失败的原因:发件人电子邮件地址中的语法错误。

失败响应530 5.7.1 Client was not authenticated

失败的可能原因:目标服务器不接受匿名邮件提交。 如果尝试使用 Telnet 向不具有配置为接受匿名连接的接收连接器的邮箱服务器直接提交邮件,则会收到此错误。

RCPT TO 命令

成功的响应250 2.1.5 Recipient OK

失败响应550 5.1.1 User unknown

失败的可能原因:指定的收件人不存在。