
在电子邮件的世界中,有很多方面需要测试,但您可以进行的最基本的测试之一就是简单地使用telnet进入给定的SMTP服务器。此SMTP检查可在确定是否存在最基本的问题时派上用场。
Business in a box.
探索我们的解决方案。
与我们的销售团队交谈
在电子邮件的世界中,测试有很多方面,但您可以进行的最基本的测试之一就是简单地 telnet 进入给定的 SMTP 服务器。这个 SMTP 检查有助于确定最基本的问题是否存在。
服务器是否正常运行?
是否有防火墙阻止通信?
邮件服务器是否允许某个特定域名/电子邮件地址的转发?
邮件服务器支持哪些 SMTP 命令?
服务器是否以正确的主机名响应?
连接是否在任何第三方软件或 API 之外工作?
通过一个简单的 telnet 测试,这些问题以及更多问题都可以得到解答。
在开始之前,请务必在新标签页中打开我们这篇文章的伴随篇:退回消息发送到哪里?,以便完成阅读此博客后查看。
请注意,以下示例中使用的命令(以及其他命令)在 RFC 2821的第 4.1 节中有介绍。
如何使用 Telnet 发送 Email?
通过telnet发送电子邮件可以帮助您识别当前配置中的可传递性问题。
在使用telnet发送电子邮件之前,确认telnet已在您的计算机上安装并启用。大多数计算机预装有telnet客户端。对于那些没有预装的Windows版本,可以通过打开控制面板中的“程序和功能”部分并选择“启用或关闭Windows功能”来安装telnet客户端。在此窗口打开的情况下,选择“telnet客户端”并点击确定。
一旦在服务器上确认安装了telnet客户端,打开您将输入提示命令的终端窗口。在Windows上,使用Windows + R,键入“cmd”,并按回车键。对于Mac用户,您可以通过打开Finder并在应用程序页面上搜索“实用工具”找到终端图标,或者在Launchpad搜索功能中输入“terminal”。
接下来,我们需要找到一个登录的邮件服务器。为此,我们需要给定域的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
现在应该显示如下内容:
Trying 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命令。这决定了将退回邮件发送到的地址。这与邮件头的from不同,这是邮件客户端中显示的电子邮件地址。
MAIL FROM: <support@port25.com> 250 2.1.0 MAIL ok
确保使用与邮件服务器域对应的域名。例如,如果您的电子邮件域是anycompany.com,您需要使用you@anycompany.com而不是you@free-mail-provider.com这样的外部电子邮件。域名的变动可能导致出现错误消息。
现在邮件FROM 命令已发送,我们可以发送RCPT TO命令。此命令告诉SMTP邮件服务器应将消息发送给谁。这可以是相同或不同于邮件头中的to,这是邮件客户端中显示的电子邮件地址。
RCPT TO: <support@port25.com> 250 2.1.5 <support@port25.com> ok
在发送RCPT TO命令之前,仔细检查您的收件人地址——显示错误消息可能表明一个拼写错误或阻止的电子邮件收件人。
在开始消息正文之前运行的最后一条命令是DATA命令。此命令让SMTP邮件服务器知道接下来发送的所有内容都是消息的正文(其中还包含标头)。
DATA 354发送消息
重要的是要注意,如果邮件服务器支持PIPELINING,如mail.port25.com那么SMTP邮件服务器可能会在EHLO/HELO之后等待接收到DATA命令才能回应其他命令。在这种情况下,键入MAIL FROM、RCPT TO和DATA命令而无需等待响应。
现在DATA命令已发送,我们可以开始发送消息内容。这从各个头开始。至少消息应包含to、from、subject和date头。这里输入的标头将显示在用户的电子邮件客户端中。
From: "John Smith" <jsmith@port25.com> To: "Jane Doe" <jdoe@port25.com> Subject: 从手动telnet会话发送的测试消息 Date: Wed, 11 May 2011 16:19:57 -0400
设置标头后,我们现在添加一个空行并用回车/换行符分隔(只需按两次回车)然后我们开始消息的实际正文。
Hello World, 这是从手动telnet会话发送的测试消息。真诚的,SMTP管理员
消息完成后,我们需要告知SMTP服务器我们已完成消息并希望SMTP邮件服务器接受它。 这通过在行中放置一个句号来实现。如果在写消息期间需要在行中放一个句号,则必须放2个句号,第一个逃逸第二个。
. 250 2.6.0 消息已收到
如果收到错误消息而不是“接收到”的通知,记录相关详细信息并联系您的电子邮件提供商以获取更多帮助。
最后,发送QUIT命令关闭连接:
QUIT 221 2.0.0 mail.port25.com说再见
这样邮件服务器已经接受了消息进行传递,您的telnet发送电子邮件测试完成,并且应出现在RCPT TO地址的inbox中!
以下是所有命令,未中断:
telnet mail.port25.com 25 Trying 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 MAIL ok RCPT TO: <support@port25.com> 250 2.1.5 <support@port25.com> ok DATA 354 发送消息 From: "John Smith" <jsmith@port25.com> To: "Jane Doe" <jdoe@port25.com> Subject: 从手动telnet会话发送的测试消息 Date: Wed, 11 May 2011 16:19:57 -0400 Hello World, 这是从手动telnet会话发送的测试消息。真诚的,SMTP管理员 . 250 2.6.0 消息已收到 QUIT 221 2.0.0 mail.port25.com说再见
使用telnet发送电子邮件可以让您快速测试连接能力,并且成本比功能强大的诊断设备或软件要低。