通过命令行连接到smtp.gmail.com

Abh*_*hek 43 gmail smtp telnet

我正在编写一个通过有效的GMail用户ID和密码发送邮件的应用程序.

我只是想在我的Windows XP命令行上模拟SMTP连接,当我smtp.gmail.com在465端口telnet 时 - 我没有看到任何东西.带有标题的空白命令窗口Telnet smtp.gmail.com随光标打开.当我输入EHLO或通常的SMTP握手命令时,提示只是关闭.

我无法弄清楚什么是错的,在哪里.我尝试连接到587,它根本没有连接到telnet.任何人都可以澄清我是否做错了什么?

the*_*11s 53

使用Linux或OSx,执行索林推荐但使用端口465.25是通用SMTP端口,但不是GMail使用的端口.另外,我不相信你想使用-starttls smtp

openssl s_client -connect smtp.gmail.com:465
Run Code Online (Sandbox Code Playgroud)

您应该获得有关SSL会话和响应的大量信息:

220 mx.google.com ...
Run Code Online (Sandbox Code Playgroud)

输入

HELO smtp.gmail.com 
Run Code Online (Sandbox Code Playgroud)

你会收到:

250 mx.google.com at your service
Run Code Online (Sandbox Code Playgroud)

从那里开始,它不像发送SMTP邮件那么简单,因为Gmail有保护措施,以确保您只发送看似来自实际属于您的帐户的电子邮件.不要输入"Helo",而是使用"Ehlo".我对SMTP知之甚少,所以我无法解释其中的差异,也没有时间去研究.也许有更多知识的人可以解释.

然后,键入"auth login",您将收到以下内容:

334 VXNlcm5hbWU6
Run Code Online (Sandbox Code Playgroud)

这基本上是在Base 64中编码的"用户名"一词.使用像这样的Base 64编码器,编码您的用户名并输入它.对您的密码执行相同操作,然后请求密码.你应该看到:

235 2.7.0 Accepted
Run Code Online (Sandbox Code Playgroud)

就是这样,你登录了.

如果您使用的是OSx或Linux终端,还有一个问题需要克服.只需按"ENTER"键,就不会导致SMTP需要结束消息的CRLF.你必须使用"CTRL + V + ENTER".所以,这应该如下所示:

^M
.^M
250 2.0.0 OK
Run Code Online (Sandbox Code Playgroud)

  • 至少对于osx,你可以在初始的'openssl'连接中添加"-crlf",以使它与RETURNS很好地协同工作.例如openssl s_client -connect smtp.gmail.com:465 -crlf (4认同)
  • 如果您的Google帐户启用了双因素身份验证,是否有人知道这是否会起作用? (3认同)
  • 你发布这个已经差不多两年了,但确实这是一个很好的答案.谢谢! (2认同)

Sor*_*anu 7

对于OSX'终端:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
Run Code Online (Sandbox Code Playgroud)


Jez*_*Jez 6

Gmail要求与其服务器进行SMTP通信以进行加密.虽然您在端口465上打开了与Gmail服务器的连接,但遗憾的是,由于Gmail要求您对连接使用STARTTLS/SSL加密,因此无法以纯文本与其进行通信.


sqr*_*ren 5

从终端启动会话:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp

响应的最后一行应为“ 250 SMTPUTF8”

启动登录

auth login

这应该返回“ 334 VXNlcm5hbWU6”。

输入用户名

以base64编码输入您的用户名(例如echo -n 'your-username' | base64

这应该返回“ 334 UGFzc3dvcmQ6”

输入密码

以base64编码输入密码(例如echo -n 'your-password' | base64

成功

您应该看到“ 235 2.7.0 Accepted”,并且您已经成功登录