在电子邮件的世界中,测试有很多方面,但你可以进行的最基本的测试之一就是简单地通过telnet连接到给定的SMTP服务器。 这个SMTP检查对于确定最基本的问题是否存在非常有用。
服务器是否运行?
是否有防火墙阻止通信?
邮件服务器是否允许特定域/电子邮件地址的中继?
邮件服务器支持哪些SMTP命令?
服务器是否以正确的主机名响应?
连接是否在任何第三方软件或API之外正常工作?
所有这些问题以及其他问题都可以通过简单的telnet测试来解答。
在开始之前,请确保打开我们这篇文章的配套文章: 反弹邮件消息被发送到哪里?在新标签页中,以便在您完成阅读此博客后阅读。
需要注意的是,在以下示例中使用的命令(以及其他命令)在RFC 2821的第4.1节中进行了说明。
我如何使用Telnet发送电子邮件?
通过telnet发送电子邮件可以帮助你识别当前配置中的可交付性问题。
在使用telnet发送电子邮件之前,请确认telnet已在您的计算机上安装并启用。 大多数计算机都预装了telnet客户端。对于那些未预装的Windows版本,可以通过打开控制面板的“程序和功能”部分并选择“启用或关闭Windows功能”进行安装。在打开此窗口后,选择“telnet客户端”,然后点击确定。
确认telnet客户端已安装在服务器上后,打开终端窗口以输入您的提示命令。在Windows上,使用Windows + R,输入“cmd”,然后按Enter。对于Mac用户,您可以通过打开Finder并在应用程序页面上搜索“实用工具”,或者在Launchpad搜索功能中输入“终端”来找到终端图标。
接下来,我们需要找到一个邮件服务器以登录。为此,我们需要给定域的DNS MX记录。这可以通过以下命令找到(在这些示例中将使用port25.com,但可以替换为任何域):
Windows:
nslookup -type=mx port25.com
非权威答案:
port25.com MX优先级 = 100,邮件交换器 = mail.port25.com
Linux:
nslookup -type=mx port25.com
非权威答案:
port25.com 邮件交换器 = 100 mail.port25.com。
SMTP使用三个端口之一 — 25, 465或587,通常由Microsoft Outlook使用。如果您的SMTP中继使用的端口与示例中的25不同,您将使用邮件交换服务器响应nslookup时指定的端口。您也可以通过询问管理员或登录到邮件交换服务器并查看协议来验证您的SMTP依赖的端口。
接下来,我们需要使用的IP的DNS PTR。 首先,我们需要了解Internet看到的我们的IP地址是什么。 要找到该地址,我们可以使用如下网站:
使用IP地址运行以下命令,其中A.B.C.D是IP地址。
Windows:
nslookup -type=ptr A.B.C.D
非权威答案:
D.C.B.A.in-addr.arpa名称 = server.example.com
Linux:
nslookup -type=ptr A.B.C.D
非权威答案:
D.C.B.A.in-addr.arpa名称 = server.example.com
server.example.com只是一个示例,您的结果将会不同。
所以,现在我们已经有了port25.com的MX记录以及我们要使用的IP的PTR,是时候登录SMTP服务器了。 要执行此操作,请使用以下命令:
telnet mail.port25.com 25
现在应该显示出以下类似的内容:
尝试69.63.149.30... 连接到mail.port25.com(69.63.149.30)。转义字符是'^]'。 220 mail.port25.com(PowerMTA(TM) v4.0)ESMTP服务准备就绪
如果此时您收到“无法连接”的错误消息,则要么端口号是正确的,要么邮件服务器面临问题。
我们需要向 邮件服务器发出的第一条命令是EHLO 或HELO。 这是一个基本问候,开始telnet客户端与SMTP服务器之间的通信。 还传递了我们之前确认的用于连接的IP的DNS PTR。
EHLO server.example.com
应该返回类似以下内容:
250-mail.port25.com说你好 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250-8BITMIME 250-XACK 250-XMRG 250-SIZE 54525952 250-VERP 250 DSN
这显示了SMTP服务器接受的SMTP命令。 并非所有SMTP服务器支持相同的一组命令。例如,yahoo仅显示以下内容:
250-8BITMIME 250-SIZE 41943040 250 PIPELINING
而aol仅显示一条消息:
250 DSN
接下来我们需要发出的命令是MAIL FROM命令。 这确定了退回邮件被发送的地址。这与发件人头部不同,后者是电子邮件客户端中显示的电子邮件地址。
MAIL FROM: <support@port25.com> 250 2.1.0 邮件正常
请确保您使用的域名与您的邮件服务器的域名相对应。例如,如果您电子邮件的域是anycompany.com,您将希望使用you@anycompany.com,而不是使用像you@free-mail-provider.com的外部电子邮件。域名的变化可能导致出现错误消息。
现在MAIL FROM 命令已发送,我们可以发送RCPT TO 命令。 此命令告诉SMTP邮件服务器邮件应发送给谁。这可以与包含在电子邮件客户端中的收件人头部相同或不同。
RCPT TO: <support@port25.com> 250 2.1.5 <support@port25.com> 正常
在发送RCPT TO命令之前,请再次检查您的收件人地址 — 这里显示的错误消息可能表明收件人电子邮件拼写错误或被阻塞。
在开始消息正文之前运行的最后一条命令是DATA 命令。 此命令让SMTP邮件服务器知道即将发送的所有内容都是消息的主体(其中还包含标题)。
DATA 354 发送消息
重要的是要注意,如果邮件服务器支持PIPELINING,例如mail.port25.com,SMTP邮件服务器可能会在发出EHLO/HELO后的其他命令响应之前,等到发出DATA命令。
在这种情况下,输入MAIL FROM、RCPT TO和DATA 命令,然后等待响应。
现在已经发送DATA 命令,我们可以开始发送消息内容。 这以各种标题开始。至少一条消息应包含to、from、subject和date头。输入的标题将显示给用户在其电子邮件客户端中。
发件人: "John Smith" <jsmith@port25.com> 收件人: "Jane Doe" <jdoe@port25.com> 主题: 从手动telnet会话发送的测试消息 日期: Wed, 11 May 2011 16:19:57 -0400
设置好标题后,我们现在添加一行空行并换行(只是按两次Enter),然后开始消息的实际正文。
你好,世界,这是从手动telnet会话发送的测试消息。真诚的,SMTP管理员
完成消息后,我们需要告诉SMTP服务器我们已经完成消息并希望SMTP邮件服务器接受它。 这是通过单独一行上的一个句点来完成的。如果在写消息时,需要在单独一行上放置一个句点,则必须放置2个句点,第一个转义第二个。
. 250 2.6.0 消息已接收
如果您收到的不是“已接收”通知的错误消息,请记录相关细节并联系您的电子邮件提供商以获得更多帮助。
最后,发送QUIT 命令以关闭连接:
QUIT 221 2.0.0 mail.port25.com说再见
至此,邮件服务器已接受消息以供交付,您的telnet发送电子邮件测试完成, 它应该在RCPT TO地址的收件箱中!!!
以下是所有命令,没有中断:
telnet mail.port25.com 25 尝试69.63.149.30... 连接到mail.port25.com(69.63.149.30)。转义字符是'^]'。 220 mail.port25.com(PowerMTA(TM) v4.0)ESMTP服务准备就绪 EHLO server.example.com 250-mail.port25.com说你好 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250-8BITMIME 250-XACK 250-XMRG 250-SIZE 54525952 250-VERP 250 DSN MAIL FROM: <support@port25.com> 250 2.1.0 邮件正常 RCPT TO: <support@port25.com> 250 2.1.5 <support@port25.com> 正常 DATA 354 发送消息 发件人: "John Smith" <jsmith@port25.com> 收件人: "Jane Doe" <jdoe@port25.com> 主题: 从手动telnet会话发送的测试消息 日期: Wed, 11 May 2011 16:19:57 -0400 你好,世界,这是从手动telnet会话发送的测试消息。真诚的,SMTP管理员 . 250 2.6.0 消息已接收 QUIT 221 2.0.0 mail.port25.com说再见
使用telnet发送电子邮件可以让您快速测试连接能力,成本低于强大的诊断设备或软件。
我如何使用Telnet身份验证测试SMTP?
现在您知道如何通过telnet检查SMTP连接,我们将讨论身份验证程序。SMTP身份验证有助于防止大量垃圾邮件进入读者的收件箱,尽管并非所有邮件交换服务器都需要它。
现代身份验证协议的主要区别在于是否存在base64编码。Base64将二进制数据转换为邮件服务器成功数据传输所需的ASCII文本格式。这是以计算机可以理解的数字格式表示您的登录凭据的一种方式 — 一些文本组合。
您可以使用软件或免费的在线工具生成您的base64。一旦您将信息传达给邮件服务器,邮件服务器会将此数据与其记录进行比较以确定身份验证。
要通过telnet测试SMTP身份验证,请完成以下步骤:
打开终端并使用telnet服务器名称和访问命令连接到邮件服务器 — 在上面的示例中为mail.port25.com。
用EHLO或HELO问候服务器,输入AUTH LOGIN,然后等待计算机的 响应。
输入base64编码的用户名,然后允许服务器答复。
输入以base64编码的密码,您应该会收到“身份验证成功”等响应。
继续使用MAIL FROM、RCPT TO、DATA和QUIT发送经过身份验证的电子邮件。