【问题标题】:Connecting to smtp.gmail.com via command line通过命令行连接到 smtp.gmail.com
【发布时间】:2010-12-03 18:10:53
【问题描述】:

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

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

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

【问题讨论】:

标签: smtp gmail telnet


【解决方案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
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-19
              • 2015-05-11
              • 2019-03-10
              • 2017-01-09
              • 2013-05-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多