根据本指南,我尝试使用 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-bin
Debian 软件包中的 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-cli
或openssl s_client
在端口 465 上执行 STARTTLS。
我只想指出,如果你的行尾不是 Windows 风格的 CRLF,一些服务器可能仍然会拒绝与你对话,因为规格规定。
行由零个或多个数据字符组成,这些数据字符以 ASCII 字符“CR”(十六进制值 0D)序列结尾,后面紧接着 ASCII 字符“LF”(十六进制值 0A)。本文档中将此终止序列表示为。符合要求的实现不得识别或生成任何其他字符或字符序列作为行终止符。服务器可以对行长度施加限制(请参阅第 4 部分)。
幸运的是,gnutls-cli 的现代实现支持该--crlf
标志,并且 openssl s_client 可以-crlf
处理这个问题。