通过命令行连接到 smtp.gmail.com
Posted
技术标签:
【中文标题】通过命令行连接到 smtp.gmail.com【英文标题】:Connecting to smtp.gmail.com via command line 【发布时间】:2010-12-03 18:10:53 【问题描述】:我正在编写一个通过有效的 GMail 用户 ID 和密码发送邮件的应用程序。
我只是想在我的 Windows XP 命令行上模拟 SMTP 连接,当我在 465 端口上 telnet smtp.gmail.com
时 - 我什么也没看到。标题为Telnet smtp.gmail.com
的空白命令窗口将打开并带有光标。当我输入EHLO
或通常的 SMTP 握手命令时,提示符就会关闭。
我无法弄清楚哪里出了问题。我尝试连接到 587,它根本无法在 telnet 中连接。如果我做错了什么,谁能澄清一下?
【问题讨论】:
另见:***.com/a/36296872/59087 【参考方案1】:Gmail 需要加密与其服务器的 SMTP 通信。尽管您在端口 465 上打开了与 Gmail 服务器的连接,但很遗憾,您将无法以明文方式与其通信,因为 Gmail 要求您使用 STARTTLS/SSL 加密进行连接。
【讨论】:
【参考方案2】:Jadaaih,您可以通过 CURL - link to Curl Developer Community 连接发送 SMTP。
这是Curl Email Client source。
【讨论】:
【参考方案3】:在 lifehacker 中查看此帖子:Geek to Live: Back up Gmail with fetchmail。它使用命令行程序。检查并查看是否有帮助。顺便说一句,当有许多其他不错的选择时,您为什么要使用命令行?
【讨论】:
嘿 Shoban,我只是想找到或编写一个动作脚本来发送邮件以在我的 flex 应用程序中使用它【参考方案4】:试试这个:
telnet smtp.gmail.com 587
【讨论】:
然后呢?你是做什么的? 问题中指出端口 587 无法正常工作,并且他已经尝试了您在此处提供的内容。你在这个线程中没有带来任何有价值的东西。 投了反对票,因为没有帮助,也没有解释之后该怎么做。 也许他在想,如果这返回一个错误,这可能意味着你的端口被阻塞了。【参考方案5】:对于 OSX 的终端:
openssl s_client -connect smtp.gmail.com:25 -starttls smtp
【讨论】:
【参考方案6】:使用 Linux 或 OSx,按照 Sorin 的建议进行操作,但改用端口 465。 25 是通用 SMTP 端口,但不是 GMail 使用的端口。另外,我不相信你想使用 -starttls smtp
openssl s_client -connect smtp.gmail.com:465
您应该获得有关 SSL 会话和响应的大量信息:
220 mx.google.com ...
输入
HELO smtp.gmail.com
您将收到:
250 mx.google.com at your service
从那里开始,它并不像发送 SMTP 邮件那么简单,因为 Gmail 有适当的保护措施,以确保您只发送看似来自实际属于您的帐户的电子邮件。不要输入“Helo”,而是使用“Ehlo”。我对 SMTP 了解不多,所以我无法解释其中的区别,也没有时间研究太多。也许有更多知识的人可以解释一下。
然后,输入“auth login”,您将收到以下信息:
334 VXNlcm5hbWU6
这实质上是使用 Base 64 编码的单词“用户名”。使用 Base 64 编码器,例如 this one,对您的用户名进行编码并输入。对您的密码执行相同的操作,这是接下来需要的。你应该看到:
235 2.7.0 Accepted
就是这样,你已经登录了。
如果您使用的是 OSx 或 Linux 终端,还有一个奇怪的问题需要克服。仅按“ENTER”键显然不会导致 SMTP 需要结束消息的 CRLF。您必须使用“CTRL+V+ENTER”。所以,这应该如下所示:
^M
.^M
250 2.0.0 OK
【讨论】:
至少对于 osx,您可以将“-crlf”添加到初始的“openssl”连接中,以使其与 RETURNS 很好地配合使用。例如openssl s_client -connect smtp.gmail.com:465 -crlf 自您发布此消息以来已经快两年了,但确实这是一个很好的答案。谢谢! 仍然像魅力一样工作。如果只有愚蠢的 Gmail 没有要求我使用我只有控制台的服务器上的网络浏览器登录;/。 是否有人知道如果您的 Google 帐户启用了双重身份验证,这是否/如何工作? “输入 HELO,您将收到...” 不,您不会。至少在 2017 年,您会收到“不允许使用不带参数的 HELO 命令”错误。您应该输入“HELO smtp.gmail.com”。【参考方案7】:tcp/465 最初旨在首先建立 SSL(和更新的 TLS)层,并在内部执行明文或普通旧协议(此处为 smtp)
tcp/587 最初是为了替代默认的 tcp/25 端口,当时垃圾邮件发送者和群发邮件攻击开始于十年或更长时间,但也在那些臭名昭著的 AOL 时代,当时一些有趣的 ISP 在默认端口上有一些阻塞出站(例如 tcp/25)用于拒绝他们自己的客户(AOL)在当时大量发送电子邮件/垃圾邮件,但需要使用替代邮件帐户和邮件提供商的 AOL 客户仍然需要从 AOL 发送邮件- 互联网连接,因此他们仍然可以连接到 tcp/587 并在那时对其进行简单的 smtp。
与STARTTLS方式做smtp的处理是使用原来众所周知的明文tcp/25和tcp/587这两个端口,只有当初始明文连接成功时,才START TLS层(因此 STARTTLS)从那里开始,从那时起具有安全连接。
至于调试这些东西可能是通过命令行工具,例如对于 Windows,有历史悠久的 blat 命令行邮件程序 (smtp),直到今天它还不能执行 TLS (STARTTLS),所以它只能使用普通 -文本 smtp 以发送其邮件。
http://www.blat.net/
然后有许多项目免费软件和开源软件具有更多的功能和特性,例如
smtp 客户端:mailsend@googlecode http://code.google.com/p/mailsend/
smtp客户端:msmtp@sourceforge(下面与mpop相关) http://msmtp.sourceforge.net/
pop3 客户端:mpop@sourceforge http://mpop.sourceforge.net/
【讨论】:
【参考方案8】:gmail 使用加密连接。因此,即使在您建立连接后,您也无法发送任何电子邮件。加密管理起来有点复杂。尝试改用 openssl。
下面的帖子应该会有所帮助-
How to send email using simple SMTP commands via Gmail?
【讨论】:
【参考方案9】:从终端开始会话:
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”并且您已成功登录
【讨论】:
对于 base64 编码使用这个 echo -n 'email or pass' | base64 谢谢@SerhiiPolishchuk。更新了答案。【参考方案10】:如何从命令行连接到“Google SMTP 邮件服务器”?
1] SSL 连接命令
openssl s_client -connect server_name:server_port -crlf -quiet -starttls smtp
带变量
服务器名称:smtp.gmail.com
server_port:587
user_name__hash:echo -n 'user_name' | base64
user_password__hash:echo -n 'user_password' | base64
2] SMTP 邮件服务器命令 - 一行中的每个命令
auth login
user_name__hash
user_password__hash
helo server_name
mail from: <message_from>
rcpt to: <message_to>
DATA
from: <message_from>
to: <message_to>
subject:message_subject
Content-Type: text/html; charset='UTF-8'; Content-Transfer-Encoding: base64;
MIME-Version: 1.0
message_content
.
quit
【讨论】:
以上是关于通过命令行连接到 smtp.gmail.com的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过命令行连接到 MySQL,但改为使用 MariaDB
为啥 smtp.gmail.com 返回 Unrecognized 命令?
Spring Boot - 无法连接到 SMTP 主机:smtp.gmail.com,端口:25,响应:421