How to check if an email address really exists

check if enail existsIn this article, you’ll learn how to use the command line to verify whether a specific email address exists or not, without sending an email. You don’t have to pay for any software or online services and you don’t have to send out test emails. You can do it all for free through the command line, without any limits on how many times you can do it!

When you send an email to, the sending mail server will look up the MX record in DNS for ‘’ and if one or more MX records are found, the sending mail server will try to deliver the email to the mail server specified in the MX record.


Let’s try to verify if the address exists or not. First, we need to find the MX records associated with the recipient’s domain, in our case that is We will use a DNS lookup utility called dig which is installed on most Linux systems. At the command prompt, type:

$ dig MX

The output should look something like this:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> MX @
;; global options: +cmd
;; Got answer:
;; - > >HEADER< < - opcode: QUERY, status: NOERROR, id: 32294
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;                     IN      MX

;; ANSWER SECTION:              3599    IN      MX      10              3599    IN      MX      20              3599    IN      MX      30              3599    IN      MX      40              3599    IN      MX      5

;; Query time: 20 msec
;; WHEN: Fri Aug 26 10:13:19 2016
;; MSG SIZE  rcvd: 150

We can notice that there are multiple MX records each with a different preference level value. The smaller the value, the higher the priority. The sending server will first try to deliver the email to the server with the highest priority and in our case that is ‘’

Next, we need to connect to the ‘’ mail server on port 25 (SMTP) to confirm the validity of the email address. For this, we can use either telnet or netcat. Both tools are available from the software repositories of most Linux distributions.

$ nc 25 # or telent 25
220 ESMTP a12si21630825itb.5 - gsmtp

To start the conversation type HELO. Some servers also accept EHLO in place of HELO.

250 at your service

Type: mail from:<>

mail from:<>
250 2.1.0 OK v72si21823782itb.85 - gsmtp

If the server responds with “250”, it means that we can proceed further. Next, type: rcpt to:<>

rcpt to:<>
250 2.1.5 OK v72si21823782itb.85 - gsmtp

The server response will show us whether the email address “” is valid or not.
If you get “250 OK” it means that the email address exists.

If you get a response of “550” as shown below, it means that email account that you tried to reach does not exist.

rcpt to:<>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 y18si12470464ioi.55 - gsmtp

That’s it! We hope you found this as useful as we did.

Please note that if you do this repeatedly from the same IP it may lead to a banned IP. Use with caution.

If you have any questions feel free to comment below or sign up for our hosting services and contact our EPIC Support Team. They are available 24/7 and they will take care of your request immediately.

PS. If you liked this post please share it with your friends on the social networks using the sharing buttons or simply leave a reply below. Thanks.

Tips and Tricks
How to set up system locale on CentOS 7
Tips and Tricks
How to backup and restore your MySQL database
Tips and Tricks
How to setup MySQL replication on CentOS
  • Fox


    Author Reply

    Good advice! I’ve used telnet to send test emails with the same method but I’ve never thought that I can also see the existence of the recipient in the process.

  • daveBro


    Author Reply

    why not use the SMTP command that was designed for this purpose? the command is VRFY => “Verifies that a mailbox is available for message delivery; for example, vrfy ted verifies that a mailbox for Ted resides on the local server. This command is off by default in Exchange implementations.”