49

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

我只是想在我的 Windows XP 命令行上模拟 SMTP 连接,当我smtp.gmail.com在 465 端口上 telnet 时,我什么也没看到。带有标题的空白命令窗口Telnet smtp.gmail.com将打开并带有光标。当我输入EHLO或通常的 SMTP 握手命令时,提示符就会关闭。

我无法弄清楚出了什么问题以及在哪里。我尝试连接到 587,它根本无法在 telnet 中连接。如果我做错了什么,谁能澄清一下?

4

10 回答 10

60

使用 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 编码器,对您的用户名进行编码并输入。对您的密码执行相同的操作,这是接下来需要的。你应该看到:

235 2.7.0 Accepted

就是这样,您已登录。

如果您使用的是 OSx 或 Linux 终端,还有一个奇怪的问题需要克服。仅按“ENTER”键显然不会导致 SMTP 需要结束消息的 CRLF。您必须使用“CTRL+V+ENTER”。因此,这应该如下所示:

^M
.^M
250 2.0.0 OK
于 2012-12-07T23:53:29.307 回答
8

对于 OSX 的终端:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
于 2010-08-26T04:59:51.810 回答
7

从终端开始会话:

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”并且您已成功登录

于 2018-05-15T12:25:47.917 回答
6

Gmail 需要加密与其服务器的 SMTP 通信。尽管您在端口 465 上打开了与 Gmail 服务器的连接,但很遗憾,您将无法以纯文本方式与其通信,因为 Gmail 要求您使用 STARTTLS/SSL 加密进行连接。

于 2009-10-04T16:08:05.123 回答
4

Jadaaih,您可以通过 CURL 连接发送 SMTP -链接到 Curl 开发者社区

这是Curl 电子邮件客户端源

于 2009-10-04T16:20:48.040 回答
2

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 端口,并且只有在初始明文连接成功时,然后启动 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/

于 2014-01-09T14:51:58.723 回答
2

查看 lifehacker 中的这篇文章:Geek to Live:使用 fetchmail 备份 Gmail。它使用命令行程序。检查并查看是否有帮助。顺便说一句,当有许多其他不错的选择时,为什么要使用命令行?

于 2009-10-04T17:36:48.790 回答
2

如何从命令行连接到“Google SMTP 邮件服务器”?

1] SSL连接命令

openssl s_client -connect {{server_name}}:{{server_port}} -crlf -quiet -starttls smtp

有变量

  • 服务器名称:smtp.gmail.com
  • 服务器端口:587
  • 用户名__哈希:echo -n '{{user_name}}' | base64
  • 用户密码__哈希: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
于 2019-10-30T18:04:53.257 回答
1

尝试这个:

telnet smtp.gmail.com 587
于 2009-11-08T13:05:24.427 回答
0

gmail 使用加密连接。因此,即使在您建立连接后,您也无法发送任何电子邮件。加密管理起来有点复杂。尝试改用 openssl。

下面的线程应该有帮助-

如何通过 Gmail 使用简单的 SMTP 命令发送电子邮件?

于 2015-07-22T17:09:33.263 回答