12

所以我正在学习 SMTP,并试图用它telnet来通过 SMTP 发送一些邮件。

我可以通过以下方式轻松地将邮件发送我的 gmail 帐户:

$ host gmail.com
...
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
...
$ telnet gmail-smtp-in.l.google.com 25
Trying 74.125.142.27...
...
Connected to gmail-smtp-in.l.google.com.
...
HELO <me@test.com>
...

但是,我无法我的 gmail 帐户发送邮件。根据我对 SMTP 的了解,我应该使用 SMTP 将邮件从 < mygmailaddress@gmail.com > 发送到传出的 gmail SMTP 服务器,然后使用 SMTP 将邮件传输到接收者传入的 SMTP 服务器等。

但是,我遇到了困难。如果我通过端口(gmail 传出 smtp 邮件服务器规范)telnet进入,我会在开始后立即断开连接,或者被要求. 我找不到如何继续的答案。smtp.gmail.com465HELO <blah@blah.com>STARTTLS

任何帮助表示赞赏。

旁注:目前我正在使用星巴克的免费 Wi-Fi 上网。我实际上无法telnet直接从我的计算机(没有路由到主机错误)。相反,只有当我ssh先进入学校网络上的远程 linux 机器,然后telnet从那里进入时,它才有效。知道这是为什么吗?

谢谢!

4

2 回答 2

25

首先,您似乎使用了错误的端口。Gmail 为 SMTP over SSL 公开端口 465,为带有 STARTTLS 的 SMTP 公开端口 587,如此所述。这两者之间的区别在于,SMTP over SSL 首先建立一个安全的 SSL/TLS 连接并通过该连接进行 SMTP,而带有 STARTTLS 的 SMTP 以未加密的 SMTP 开始,然后切换到 SSL/TLS。这就是您的 HELO 没有得到响应的原因。

$ telnet smtp.gmail.com 587
Trying 74.125.25.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP fr1sm24834956pbb.26 - gsmtp
HELO <me@test.com>
250 mx.google.com at your service
STARTTLS
220 2.0.0 Ready to start TLS

但是,即使您远程登录到端口 587,您仍然无法手动发送任何电子邮件。为了做任何有趣的事情,您将不得不STARTTLS,并且您将无法处理SSL/TLS 二进制协议来协商加密。

于 2013-06-25T21:42:05.213 回答
19

telnet 客户端不会为您协商 TLS 会话。您应该使用其他工具,例如 OpenSSL 的 s_client。以下为您发出 STARTTLS 命令并处理 TLS 协商:

$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf

或者,您可以直接连接到 SMTPS 端口:

$ openssl s_client -connect smtp.gmail.com:465 -crlf
于 2014-02-20T13:56:14.790 回答