使用 telnet 测试 SMTP 通信

 

适用于: Exchange Server 2010 SP2, Exchange Server 2010 SP3

上一次修改主题: 2016-11-28

本主题说明如何使用 Telnet 测试邮件服务器之间的简单邮件传输协议 (SMTP) 通信。默认情况下,SMTP 在端口 25 上进行侦听。如果在端口 25 上使用 Telnet,则可以输入 SMTP 命令用来连接到 SMTP 服务器,且可以将 Telnet 会话当做 SMTP 邮件服务器来发送邮件。您还可以查看连接过程和邮件提交过程中每个步骤是成功还是失败。

在以下方案中,您可能需要使用 Telnet 测试发往或来自 Microsoft Exchange Server 组织中存在的传输服务器的 SMTP 通信:

  • 从位于外围网络之外的主机连接到组织的边缘传输服务器,并发送一封测试邮件。

  • 从组织的边缘传输服务器连接到远程邮件服务器,并发送一封测试邮件。

本主题中的步骤表明如何使用 Microsoft Windows 中包含的组件 Telnet 客户端。第三方 Telnet 客户端可能需要不同于 Windows Telnet 组件的语法。

先决条件

  • 配置接受连接器以允许匿名访问或基本身份验证   由于集线器传输服务器之间正常进行的邮件传输经过加密和身份验证,因此在端口 25 上使用 Telnet 测试通信时,内部集线器传输服务器应将接受连接器配置为允许匿名访问或基本身份验证来接收邮件。面向 Internet 的服务器需要使用匿名访问。

    注释注意:
    将邮件发送到接受基本身份验证的接收连接器时,您必须有可将用于用户名和密码的文本字符串转换为 Base64 格式的实用程序。由于使用基本身份验证时,用户名和密码非常容易辨别,因此不建议使用无加密的基本身份验证。
  • 连接到远程邮件服务器   您可能还需要从组织的边缘传输服务器连接到远程邮件服务器。对于面向 Internet 的 SMTP 服务器,如果配置为验证源 IP 地址、相应域名系统 (DNS) 域名以及所有尝试向服务器发送邮件的 Internet 主机的反向查找 IP 地址,则这有助于避免其拒绝测试邮件。

  • 安装和/或启用 Telnet 客户端   在使用 Telnet 对邮件服务器之间的 SMTP 通信进行测试之前,您可能还需要执行下列一项或多项任务:

    • 安装 Telnet 客户端(如果尚未安装)。有关如何在 Windows Vista 或 Windows Server 2008 上安装 Telnet 客户端的详细信息,请参阅安装 Telnet 客户端

    • 在 Windows Server 2008 上启用 Telnet 客户端。请参阅本主题后面的步骤。

  • 查找 SMTP 服务器的 FQDN 或 IP 地址。如果不知道 FQDN 或 IP 地址,可以使用 Nslookup 查找 SMTP 服务器的 FQDN 或 IP 地址。请参阅本主题后面的步骤。

在 Windows Server 2008 中启用 Telnet 客户端

完成此步骤的最低要求为 Windows Server 2008 本地 Administrators 组的成员或等效身份。

在 Windows Server 2008 中,默认情况下禁用 Telnet 客户端。若要启用,请执行下列步骤:

  1. 打开“服务器管理器”。

  2. 单击“操作”,然后选择“添加功能”。

  3. 选择“Telnet 客户端”并单击“下一步”。

  4. 单击“安装”,然后单击“关闭”以完成 Telnet 客户端的安装。

使用 Nslookup 查找 SMTP 服务器的 FQDN 或 IP 地址

若要使用 Telnet 端口 25 连接到目标 SMTP 服务器,必须使用 SMTP 服务器的完全限定域名 (FQDN) 或 IP 地址。如果 FQDN 或 IP 地址未知,查找此信息的最简便方法是使用 Nslookup 命令行工具查找目标域的 MX 记录。

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

  2. 键入 set type=mx 并按 Enter 键。

  3. 键入 set timeout=20 并按 Enter 键。默认情况下,Windows DNS 服务器具有 15 秒的递归 DNS 查询超时限制。

  4. 请键入想要查找 MX 记录的域名。例如,若要查找 fabrikam.com 域的 MX 记录,请键入 fabrikam.com. 并按 Enter 键。

    注释注意:
    尾随句点 ( . ) 表示 FQDN。使用尾随句点可防止无意中将为网络配置的默认 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 服务器。较低的首选项值表示首选 SMTP 服务器。您可以使用多个 MX 记录和不同的首选项值,以实现负载平衡和容错。

  5. 准备结束 Nslookup 会话时,请键入 exit 并按 Enter 键。

注释注意:
组织的内部网络规定的防火墙或 Internet 代理限制可能会阻止您使用 Nslookup 工具查询 Internet 上的公用 DNS 服务器。
MX 记录不是 Exchange 组织内的内部邮件流绝对必需的。如果要在组织中查找任何集线器传输服务器或已订阅边缘传输服务器的 FQDN,则可以使用 Exchange 命令行管理程序中的下列命令:Get-ExchangeServer | where {$_.isHubTransportServer -eq $true -or $_.isEdgeServer -eq $true} | Format-List Fqdn,ServerRole
有关详细信息,请参阅 Get-ExchangeServer管道传输

在端口 25 上使用 Telnet 测试 SMTP 通信

为了提供示例,下列步骤将使用下表中描述的值:

  • 目标 SMTP 服务器   mail1.fabrikam.com

  • 源域   contoso.com

  • 发件人的电子邮件地址   chris@contoso.com

  • 收件人的电子邮件地址   kate@fabrikam.com

  • 邮件主题   来自 Contoso 的测试

  • 邮件正文   这是一封测试邮件

    注释注意:
    应始终使用有效的发件人电子邮件地址,以便将目标 SMTP 服务器生成的未送达报告 (NDR) 邮件传递给邮件发件人。

Telnet 客户端中的命令不区分大小写。为清晰起见,SMTP 命令动词均使用大写。

  1. 在命令提示符处,键入 telnet,然后按 Enter 键。此命令将打开 Telnet 会话。

  2. 键入 set localecho 并按 Enter 键。此可选命令可使您在键入字符时查看这些字符。某些 SMTP 服务器可能需要此设置。

  3. 键入 set logfile*<文件名>*。此可选命令可以将 Telnet 会话记录到指定的日志文件中。如果您仅指定了文件名,则日志文件的位置将是当前工作目录。如果您指定了路径和文件名,该路径必须位于计算机本地。指定的路径和文件名都必须以 Microsoft DOS 8.3 格式输入。您指定的路径必须已存在。如果您指定了一个不存在的日志文件,系统将为您创建一个日志文件。

  4. 键入 open mail1.fabrikam.com 25 并按 Enter 键。

    注释注意:
    在 Telnet 会话中连接到目标 SMTP 服务器后,无法使用 Backspace 键。如果您在键入 SMTP 命令时出现错误,则必须按下 ENTER 键,然后再键入该命令。无法识别的 SMTP 命令或语法错误会导致类似下面的错误消息:
    500 5.3.3 Unrecognized command
    
  5. 键入 EHLO contoso.com 并按 Enter 键。

  6. 键入 MAIL FROM:chris@contoso.com 并按 Enter 键。

  7. 键入 RCPT TO:kate@fabrikam.com NOTIFY=success,failure 并按 Enter 键。可选的 NOTIFY 命令可定义目标 SMTP 服务器必须向发件人提供的特定传递状态通知 (DSN) 邮件。DSN 邮件是在 RFC 1891 中定义的。在本例中,您要查询有关邮件传递成功或失败的 DSN 邮件。

  8. 键入 DATA 并按 Enter 键。您将收到与以下类似的响应:

    354 Start mail input; end with <CLRF>.<CLRF>
    
  9. 键入 主题:来自 Contoso 的测试,再按 ENTER 键。

  10. 按 Enter 键。RFC 2822 需要在 Subject: 头字段和邮件正文间留一个空行。

  11. 键入 这是一封测试邮件,再按 ENTER 键。

  12. 按 Enter 键,键入句点 ( . ),再按 Enter 键。您将收到与以下类似的响应:

    250 2.6.0 <GUID> Queued mail for delivery
    
  13. 若要与目标 SMTP 服务器断开连接,请键入 QUIT 并按 Enter 键。您将收到与以下类似的响应:

    221 2.0.0 Service closing transmission channel
    
  14. 若要关闭 Telnet 会话,请键入 quit 并按 Enter 键。

评估 Telnet 会话的结果

针对以上示例中所使用的以下命令,本节提供有关这些命令响应的信息:

  • 打开 mail1.fabrikam.com 25

  • EHLO contoso.com

  • MAIL FROM:chris@contoso.com

  • RCPT TO:kate@fabrikam.com NOTIFY=success,failure

    注释注意:
    在 RFC 2821 中定义的三位数 SMTP 响应代码对于所有 SMTP 邮件服务器都相同。对于某些 SMTP 邮件服务器,文本说明可能稍有不同。在上一个示例中,目标计算机运行 Exchange Server 2010。

打开 mail1.fabrikam.com 25

成功响应: 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 contoso.com

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

失败响应: 501 5.5.4 Invalid domain name

**失败的可能原因:**域名中存在无效字符。或者,存在有关目标 SMTP 服务器的连接限制。

注释注意:
EHLO 是 RFC 2821 中定义的扩展的简单邮件传输协议 (ESMTP) 命令动词。ESMTP 服务器可在初始连接时公布其功能。这些功能包括其最大的可接受邮件大小以及其支持的身份验证方法。HELO 是 RFC 821 中定义的旧版 SMTP 命令动词。多数 SMTP 邮件服务器都支持 ESMTP 和 EHLO。

MAIL FROM:chris@contoso.com

成功响应: 250 2.1.0 Sender OK

失败响应: 550 5.1.7 Invalid address

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

失败响应: 530 5.7.1 Client was not authenticated

**可能的失败原因:**目标服务器不接受匿名邮件提交。如果您试图使用 Telnet 直接向集线器传输服务器提交邮件,则将收到此错误消息。

RCPT TO:kate@fabrikam.com NOTIFY=success,failure

成功响应: 250 2.1.5 Recipient OK

失败响应: 550 5.1.1 User unknown

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

 © 2010 Microsoft Corporation。保留所有权利。