8

Based on this guide I am trying to send a test email using telnet from linux

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

but the connection immediately disconnects:

$ telnet smtp.gmail.com 465
Trying 108.177.126.108...
Connected to smtp.gmail.com.
Escape character is '^]'.
MAIL FROM: asdasd@asd.Connection closed by foreign host

How do I keep the connection open long enough to send my test mail?

AnFi
  • 6,326
u123
  • 287
  • 3
  • 10
  • 25

3 Answers3

12

SMTP session to smtps(465) port using telnet

Connections to smtp (25) start as unencrypted.
Connections to smtps (465) start/negotiate encryption before any SMTP protocol level communication.
You should get "SMTP greeting message" from SMTP server before sending any SMTP commands.

Classic/standard telnet does not support encryption (ssl - Secure Socket Layer).
You may check if your telnet program supports it.


Linux: Debian and Ubuntu

Package telnet-ssl provides telnet variant with ssl support. It supports command line like below:

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

One on a few alternatives is provided by gnutls-cli program from gnutls-bin Debian package.

gnutls-cli -p 465 smtp.gmail.com
AnFi
  • 6,326
1

Since this Q&A came up again on the front page

The canonical tool (almost always already installed as well) is OpenSSL

The relevant sub command to test both explicit TLS / SSL as well as opportunistic TLS SSL with startssl / starttls is openssl s_client

openssl s_client -connect servername:465

And for opportunistic TLS on for example port 25

openssl s_client -connect -starttls smtp servername:25
HBruijn
  • 84,206
  • 24
  • 145
  • 224
1

The other answers are correct. You can use either gnutls-cli or openssl s_client to do a STARTTLS on port 465.

I just want to point out that some servers may still refuse to talk to you if your line endings are not Windows-style CRLF as the spec dictates.

Lines consist of zero or more data characters terminated by the sequence ASCII character "CR" (hex value 0D) followed immediately by ASCII character "LF" (hex value 0A). This termination sequence is denoted as in this document. Conforming implementations MUST NOT recognize or generate any other character or character sequence as a line terminator. Limits MAY be imposed on line lengths by servers (see Section 4).

Luckily modern implementations of gnutls-cli supports the --crlf flag, and openssl s_client has a -crlf to handle this problem.

chutz
  • 8,300