使用SMTP,Gmail和STARTTLS

时间:2013-06-24 17:43:51

标签: email networking ssl smtp gmail

所以我正在学习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从&lt;发送邮件mygmailaddress@gmail.com&gt;  到传出的gmail SMTP服务器,后者又使用SMTP将邮件传输到接收方传入的SMTP服务器等。

然而,我遇到了困难。如果我telnet通过端口smtp.gmail.com进入465(gmail传出smtp邮件服务器规范),我会在HELO <blah@blah.com>开始后立即断开连接,或者要求{{1} }。我无法找到如何进行的答案。

感谢任何帮助。

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

谢谢!

2 个答案:

答案 0 :(得分:21)

首先,看起来你正在使用错误的端口。 Gmail为SMTP上的端口465和使用STARTTLS的SMTP端口587显示为documented here。这两者之间的区别在于,SSL 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

但即使你telnet到587端口,你仍然无法手动发送任何电子邮件。为了做任何有趣的事情,您必须STARTTLS,并且您将无法处理SSL/TLS binary protocol来协商加密。

答案 1 :(得分:16)

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