使用 telnet 与 smtps(465) 端口建立 SMTP 会话

使用 telnet 与 smtps(465) 端口建立 SMTP 会话

根据本指南,我尝试使用 telnet 从 linux 发送测试电子邮件

https://linuxconfig.org/send-an-email-using-telnet

但连接立即断开:

$ telnet smtp.gmail.com 465
Trying 108.177.126.108...
Connected to smtp.gmail.com.
Escape character is '^]'.
MAIL FROM: [email protected] closed by foreign host

我如何保持连接足够长的时间来发送我的测试邮件?

答案1

使用 telnet 与 smtps(465) 端口建立 SMTP 会话

与 smtp (25) 的连接以未加密状态开始。
与 smtps (465) 的连接在任何 SMTP 协议级通信之前开始/协商加密。
在发送任何 SMTP 命令之前,您应该从 SMTP 服务器收到“SMTP 问候消息”。

Classic/standardtelnet不支持加密 (ssl - 安全套接字层)。
您可以检查您的 telnet 程序是否支持它。


Linux:Debian 和 Ubuntu

包裹telnet-ssl提供支持 SSL 的 telnet 变体。它支持如下命令行:

telnet-ssl -z ssl smtp.gmail.com 465

gnutls-binDebian 软件包中的 gnutls-cli 程序提供了一些替代方案之一。

gnutls-cli -p 465 smtp.gmail.com

答案2

由于这个问答再次出现在头版

规范工具(几乎总是已经安装)是OpenSSL

用于测试显式 TLS / SSL 以及机会性 TLS使用 startssl / starttls 的 SSL 是 openssl s_client

openssl s_client -connect servername:465

例如,对于端口 25 上的机会性 TLS

openssl s_client -connect -starttls smtp servername:25

答案3

其他答案都是正确的。您可以使用gnutls-cliopenssl s_client在端口 465 上执行 STARTTLS。

我只想指出,如果你的行尾不是 Windows 风格的 CRLF,一些服务器可能仍然会拒绝与你对话,因为规格规定。

行由零个或多个数据字符组成,这些数据字符以 ASCII 字符“CR”(十六进制值 0D)序列结尾,后面紧接着 ASCII 字符“LF”(十六进制值 0A)。本文档中将此终止序列表示为。符合要求的实现不得识别或生成任何其他字符或字符序列作为行终止符。服务器可以对行长度施加限制(请参阅第 4 部分)。

幸运的是,gnutls-cli 的现代实现支持该--crlf标志,并且 openssl s_client 可以-crlf处理这个问题。

相关内容