7

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: [email protected] closed by foreign host

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

3 Answers 3

11

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
6
  • Ok any recommendation to a command line tool that supports smtps (465)?
    – u123
    Oct 24, 2020 at 16:51
  • @u123 Which Operating System (Linux distribution) do you use?
    – AnFi
    Oct 24, 2020 at 17:21
  • Using Ubuntu 20.04
    – u123
    Oct 24, 2020 at 17:22
  • Also, HELO/EHLO comes before MAIL FROM Oct 24, 2020 at 17:23
  • @u123 I have added hint for Linux Debian and Ubuntu.
    – AnFi
    Oct 24, 2020 at 17:30
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
1
  • 1
    You may also have to add -crlf as some SMTP servers follow the spec rfc-editor.org/rfc/rfc5321#section-2.3.8 to the letter and expect every new line to be an actual CR followed by LF. Which is not how Linux works.
    – chutz
    Dec 19, 2023 at 10:01
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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .