Understanding MX records

What is an MX Record

MX stands for Mail Exchange Records. MX records are used in DNS records(or Zone files) to specify how email should be routed.


Hire Bobcares Server Administrators
Get super reliable servers and delighted customers

See how we do it!


Lets take an example of say liz@mydomain.com.

This is how a typical DNS record(for mydomain.com) looks like.

; Zone file for mydomain.com

@ 14400 IN SOA ns.mynameserver.com. root.ns.mynameserver.com. (
			600 )
mydomain.com. 14400 IN NS ns.mynameserver.com.
mydomain.com. 14400 IN NS ns2.mynameserver.com.
mydomain.com. 14400 IN NS ns3.mynameserver.com.

; A Record
mydomain.com. 14400 IN A

localhost.mydomain.com. 14400 IN A

; MX record
mydomain.com. 14400 IN MX 0 mydomain.com.

mail 14400 IN CNAME mydomain.com.
www 14400 IN CNAME mydomain.com.
ftp 14400 IN CNAME mydomain.com.

Notice the line with the “MX” in it. This is called the MX record.

mydomain.com. 14400 IN MX 0 mydomain.com.

The MX record shows that all emails @ mydomain.com should be routed to the mail server at mydomain.com. The DNS record shows that mydomain.com is located at This means that email meant for liz@mydomain.com will be routed to the email server at This finishes the task of the MX record. The email server on that server(say sendmail) then takes over, collects the email and then proceeds to distribute it to the user “liz”.

It is important that there be a dot(“.”) after the domain name in the MX record. If the dot is absent, it routes to “mydomain.com.mydomain.com”. The number 0, indicates Preferance number. Mail is always routed to the server which has the lowest Preferance number. If there is only one mail server, it is safe to mark it 0.

Multiple mail servers

Multiple email servers are useful for the sake of redundancy. If the Highest Priority email server (one with the lowest Preference number) is down, then the email is routed to the Server with the second highest Preference number.

For example

mydomain.com. 14400 IN A
server2.mydomain.com. 14400 IN A
mydomain.com. 14400 IN MX 0 mydomain.com.
mydomain.com. 14400 IN MX 30 server2.mydomain.com.

You can have unlimited MX entries for Fallback.

If all the MX records are equal Preference numbers, the client simply attempts all equal Preference servers in random order, and then goes to MX record with the next highest Preference number.

Pointing MX records to an IP

Its not possible to have an MX record pointing directly to an IP. For example ‘mydomain.com. 14400 IN MX 0“ is wrong. Define an “A Record” first and then have the MX record pointing to it.

server2.mydomain.com. 14400 IN A
mydomain.com. 14400 IN MX 30 server2.mydomain.com.

MX records for Subdomains

A Subdomain is something like this “Subdomain.mydomain.com”. Assume you want to send an email to liz@subdomain.mydomain.com and to capture that on another server.

mydomain.com. 14400 IN A
server2.mydomain.com. 14400 IN A
mydomain.com. 14400 IN MX 30 mydomain.com.
subdomain.mydomain.com. 14400 IN MX 30 server2.mydomain.com.

In this configuration, liz@subdomain.mydomain.com would go to and liz@mydomain.com would go to

Testing the MX record

Once you setup your MX record, always test it to see if it is setup correctly. You can do with tools like nslookup.

[root@localhost sangeetha]# nslookup
> set q=mx
> yahoo.com
Server: Address:
Non-authoritative answer:
yahoo.com mail exchanger = 1 mx1.mail.yahoo.com.
yahoo.com mail exchanger = 1 mx2.mail.yahoo.com.
yahoo.com mail exchanger = 1 mx3.mail.yahoo.com.
yahoo.com mail exchanger = 5 mx4.mail.yahoo.com.
Authoritative answers can be found from:
yahoo.com nameserver = ns2.yahoo.com.
yahoo.com nameserver = ns3.yahoo.com.
yahoo.com nameserver = ns4.yahoo.com.
yahoo.com nameserver = ns5.yahoo.com.
yahoo.com nameserver = ns1.yahoo.com.
mx1.mail.yahoo.com internet address =
mx1.mail.yahoo.com internet address =
mx1.mail.yahoo.com internet address =
mx1.mail.yahoo.com internet address =
ns1.yahoo.com internet address =
ns2.yahoo.com internet address =
ns3.yahoo.com internet address =
ns4.yahoo.com internet address =
ns5.yahoo.com internet address =

How spammers read your MX

Spammers will typically target your lowest priority Email servers, in the hopes of encountering a poorly configured box. The Spam program reads the MX records, locates the Email server with the lowest Priority(highest Preference number) and attempts to spam with that server.

So it is important to equally update all your email servers with Antivirus and Antispam.

Articles by Sangeetha Naik About the author:

Sangeetha Naik heads Bobcares.com. She is the co-founder of Poornam Info Vision Ltd., Software and IT services company specializing in Linux based solutions for Webhosts and ISPs. Poornam Info Vision is an ISO 9001:2000 certified company with a team of over 140 engineers.

Sangeetha is a Computer Engineer based in India and has over 7 years of experience in the hosting industry. Her articles have been published both online as well as in print in magazines.

DNSServer Support


  1. Hi Sangeetha,

    Thanks for the easy to understand explanation of MX records. I have a question. I have a limited number of records that I can use through my registrar for a given domain. However, I would like to give each of my family members their own email subdomain with 5 MX records each. I’ll soon run out of records.

    For example: joe@joe.familyname.com, raj@raj.familyname.com, kids@herb.familyname.com… etc… etc. I’m using Google Apps for each one, so they all point to the same servers.

    The question…
    Is there a way to combine the MX records? The asterisk is not allowed (*.familyname.com) when specifying a MX record. Is there another way to conserve records and still catch the mail for all of the various subdomains?


  2. If you can’t use wildcards with your Host, I would suggest a single MX record for each subdomain(family member).
    For example

    ; MX record
    joe.mydomain.com. 14400 IN MX 0 mydomain.com.
    liz.mydomain.com. 14400 IN MX 0 mydomain.com.

    Of course, I am assuming that your mail server is implemented in my domain.com.

    You can have multiple email accounts setup with individual subdomains, using your mail server. For example. joe@joe.mydomain.com, joe.girlfriend@joe.mydomain.com etc. That can be setup with your mail server.

    If this is what you need, there really is no need to have multiple MXs for each family member. Thereby, you can restrict it to 1 MX per family member.

  3. I switched my MX records to point to Google Apps from my domain barmeister.com but I want mail.barmeister.com to still go to my own server. Currently mail.barmeister.com is a CNAME for barmeister.com (not sure how to say that :-)). I tried making a MX record for mail.barmeister.com to point to my server but that does not seems to work. Any ideas on what I should do?


  4. MX records should always point to a A record. Technically it should not point to a CNAME record, and may be disallowed by your DNS provider or host. However it is still widely implemented. To see how you can implement it, see http://www.zytrax.com/books/dns/ch8/cname.html

  5. Hi Sangeetha,
    Many thanks for your excellent documentation on the SOA and MX records. I found them very helpful.

  6. H Sangeetha
    i have small query on MX record below

    mx1 86400 IN a
    mx2 86400 IN a

    10 @ 604800 IN mx mx1.mydomain.com.
    20 @ 604800 IN mx mx2.mydomain.com.
    i have user like user1, user2 & user3 whereas user2/user3 is in mx2.mydomain.com

    1.when someone send mail to user3@mydomain.com how it deliver the mail on mx2 server ?
    2.what is maximum no for MX priority?

  7. Hi sangeetha,
    I need to read the mx record to know whether an email address exists in the mail box or not is there a way to do this?

  8. I have looked everywhere for the MX Records for Yahoo Mail. I recently moved host and need to enter new MX Records so my mail still goes to Yahoo. I need the PRIORITY, HOST and RECORD and it is no where to be found!

  9. Hi, thnks for well explained article. Any newbie can understand it. 🙂



Security specialists will audit, update, patch, harden and monitor your server 24/7.

Starting at $69.99/month