As a Linux administrator, you may find it necessary to troubleshoot or test your Simple Mail Transfer Protocol (SMTP) server to ensure it’s working correctly. One of the most effective ways to do this is by using the telnet command. Telnet allows you to manually connect to the SMTP server, send commands, and observe responses directly from the server, helping you to diagnose issues or verify configurations. This guide will walk you through the process of testing an SMTP server using the telnet command.

Prerequisites

Before proceeding, ensure that:

Telnet is Installed: Most modern Linux distributions do not include Telnet by default due to security concerns, as it transmits data in plain text. However, for testing purposes, you can install it using your package manager:

On Debian/Ubuntu:

sudo apt install telnet

On Red Hat/CentOS:

sudo yum install telnet

SMTP Server Details: You should have the SMTP server’s hostname or IP address and the port number (usually 25, 587, or 465) ready.

Step-by-Step Guide to Test SMTP with Telnet

Step 1: Open a Telnet Session

To begin testing the SMTP server, open a terminal on your Linux system and initiate a Telnet session to the SMTP server.

telnet smtp.example.com 25

Replace smtp.example.com with your SMTP server’s domain or IP address, and 25 with the appropriate port number if it’s different.

Step 2: Understanding the SMTP Server’s Greeting

Once connected, the SMTP server will respond with a greeting message, typically displaying the server’s hostname and indicating that it’s ready to receive commands. It should look something like this:

220 smtp.example.com ESMTP Postfix

If you receive this, it means the connection was successful, and the SMTP server is ready to accept commands.

Step 3: Initiating the SMTP Conversation

EHLO Command: Start the conversation by identifying yourself to the SMTP server. Use the EHLO command followed by your domain or any placeholder like localhost.

EHLO localhost

The server should respond with a list of supported extensions and features:

250-smtp.example.com Hello localhost [127.0.0.1]
250-SIZE 10485760
250-PIPELINING
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

HELO Command: Alternatively, you can use the older HELO command instead of EHLO. However, EHLO is recommended because it indicates support for extended features.

HELO localhost

The response is usually simpler:

250 smtp.example.com Hello localhost [127.0.0.1]

Step 4: Specify the Sender

Next, specify the sender’s email address using the MAIL FROM command:

MAIL FROM:<[email protected]>

The server should acknowledge the command:

250 2.1.0 Ok

Step 5: Specify the Recipient

Now, specify the recipient’s email address with the RCPT TO command:

RCPT TO:<[email protected]>

If the recipient is accepted, you will see:

250 2.1.5 Ok

If the recipient is invalid or not accepted by the server, you might see an error like:

550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table

Step 6: Sending the Message Data

To send the email data, use the DATA command:

DATA

The server will respond with a message indicating that it is ready to receive the data:

354 End data with .

Now, you can type the email’s content. Start with the headers:

Subject: Test Email
From: [email protected]
To: [email protected]

This is a test email sent using Telnet.

After writing the message, end the data entry by typing a single period (.) on a new line and pressing Enter:

.

The server should respond:

250 2.0.0 Ok: queued as ABC123DEF456

This indicates that the email has been accepted and queued for delivery.

Step 7: Ending the Session

To terminate the SMTP session, use the QUIT command:

QUIT

The server will close the connection:

221 2.0.0 Bye

Step 8: Interpreting Common SMTP Responses

Throughout your interaction with the SMTP server, you’ll receive various response codes. Here are some common ones:

  • 220: Server is ready.
  • 250: Requested mail action okay, completed.
  • 354: Start mail input; end with ..
  • 421: Service not available, closing transmission channel.
  • 450: Requested mail action not taken: mailbox unavailable.
  • 550: Requested action not taken: mailbox unavailable.

Conclusion

Testing an SMTP server using Telnet is a valuable skill for any Linux administrator. It allows you to manually send commands and observe the server’s responses, making it easier to diagnose issues such as connection problems, incorrect SMTP configurations, or issues with sending and receiving emails. While Telnet is useful for testing, remember that it transmits data in plain text, so it should only be used in secure, controlled environments. For production use, always ensure that your SMTP communications are encrypted with STARTTLS or other secure protocols.

By following this guide, you can test and troubleshoot your SMTP server using the Telnet command.