MX/MTA: Mail – Sending an email via telnet


Sending an email through a Web or Client interface is easy. I’m going to show you how to send an email manually via telnet.

I am going to keep it basic, as I don’t want to make this a long drawn out book about MX and MTA’s.

So lets get to it…

In a nut shell, MTA’s are the routers of the Mail world. MX records show the MTA’s where to send which email to which domain (for example: yahoo.com or gmail.com).

I am going to use Yahoo’s MX/MTA‘s for this example. Let’s say I want to send an email from my gmail.com account to my yahoo.com account.

You first need to figure out the MX record(s) for yahoo.com. There is more than one way to figure this out, but I will show you three ways: dig, host, and nslookup.

$ dig mx yahoo.com +short | sort
1 e.mx.mail.yahoo.com.
1 f.mx.mail.yahoo.com.
1 g.mx.mail.yahoo.com.
1 h.mx.mail.yahoo.com.
1 i.mx.mail.yahoo.com.
1 j.mx.mail.yahoo.com.
1 k.mx.mail.yahoo.com.
1 l.mx.mail.yahoo.com.
$ host -t mx yahoo.com | sort
yahoo.com mail is handled by 1 e.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 f.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 g.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 h.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 i.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 j.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 k.mx.mail.yahoo.com.
yahoo.com mail is handled by 1 l.mx.mail.yahoo.com.

Note: The -t is for type.

$ nslookup
> set type=mx
> yahoo.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
yahoo.com       mail exchanger = 1 e.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 f.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 g.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 h.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 i.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 j.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 k.mx.mail.yahoo.com.
yahoo.com       mail exchanger = 1 l.mx.mail.yahoo.com.

Authoritative answers can be found from:
> exit

Keep in mind that all the MTA’s are sitting behind each single MX record. There can be as few as one MTA or even hundreds behind any single MX record.

Now that you’ve got the MX records, you can then send an email manually via telnet.

WARNING: If you manage to mess up a certain amount of times (lets say 3-5), your IP may get deferred for about 5-10 minutes by the domain provider. The key is to do it quickly or the MTA will timeout due to inactivity.

Example of a deferred email attempt:

$ telnet e.mx.mail.yahoo.com 25
Trying XXX.XXX.XXX.XXX...
Connected to e.mx.mail.yahoo.com.
Escape character is '^]'.
421 4.7.0 [GL01] Message from (XXX.XXX.XXX.XXX) temporarily deferred - 4.16.50. Please refer to http://postmaster.yahoo.com/errors/postmaster-21.html
Connection closed by foreign host.

Sending an email via telnet:

Note: ENTER means press the Enter Key. DO NOT TYPE ENTER.

Sending Format using Yahoo! as an Example:

$ telnet e.mx.mail.yahoo.com 25 ENTER
HELO yahoo.com ENTER
MAIL FROM:<username1@gmail.com> ENTER
RCPT TO:<username2@yahoo.com> ENTER
DATA ENTER
from:username1@gmail.com ENTER
to: username2@yahoo.com ENTER
Subject: Test Email ENTER
This is a test email ENTER
. ENTER
QUIT ENTER

Format Breakdown:

telnet e.mx.mail.yahoo.com 25Connecting to MX/establishing connection
HELO yahoo.comIntroduce yourself to the MX
MAIL FROM: <username1@gmail.com>Tell the MX your email address, or who the email is from.
RCPT TO: <username2@yahoo.com>Tell the MX who the email is to, or who the email is to.
DATATell the MX that you are ready to write the main parts of the email (from, to, subject, and body), which is called the DATA.
from:username1@gmail.comTell the recipient your email address, or who the email is from (for reply and visual purposes). – Not required
to:username2@yahoo.comTell the recipient who the email is to, or who the email is to (for visual purposes). – Not required
Subject: Test EmailSubject – Not required
This is a test emailBody – Not required
.Type a . (period) to close the session.
QUITType QUIT to end the session.

The Actual Send

I substituted the from and to email addresses for obvious reasons.

$ telnet l.mx.mail.yahoo.com 25
Trying 74.6.136.244...
Connected to l.mx.mail.yahoo.com.
Escape character is '^]'.
220 mta1232.mail.sk1.yahoo.com ESMTP YSmtp service ready
HELO yahoo.com
250 mta1232.mail.sk1.yahoo.com
MAIL FROM:<username1@gmail.com>
250 sender  ok
RCPT TO:<username2@yahoo.com>
250 recipient  ok
DATA
354 go ahead
from:username1@gmail.com
to: username2@yahoo.com
Subject: Test Email

This is a test email
.
250 ok dirdel
quit
221 mta1232.mail.sk1.yahoo.com
Connection closed by foreign host.
, ,

4 responses to “MX/MTA: Mail – Sending an email via telnet”

  1. It keep closing down, what do I do? i try to type then it says “closed down by foreign host”

    • For some reason, the greater than and less than symbols were not showing up in my code. I went ahead and fixed it. You need to have your MAIL FROM and RCPT To email addresses within .

      Check the examples above.

    • Also, make sure to do it fast enough before the MTA closes your session. I usually copy and paste the commands from a text file.