| # | Priority | Exchange | Null MX | CNAME | A | AAAA | Notes | |
|---|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} | {{ row.priority === null ? '-' : row.priority }} | {{ row.exchange }} | {{ row.isNullMx ? 'Yes' : 'No' }} | {{ row.cname && row.cname.length ? row.cname.join(', ') : '-' }} | {{ row.a.join(', ') || '-' }} | {{ row.aaaa.join(', ') || '-' }} | {{ row.note || '-' }} |
| Resolver | Status | Code | Time | Answers |
|---|---|---|---|---|
| {{ e.resolver }} | {{ e.status }} | {{ e.code }} | {{ e.timeMs }} ms | {{ e.answers || '-' }} |
| # | Check | Status | Notes | |
|---|---|---|---|---|
| {{ idx + 1 }} | {{ c.label }} | {{ c.status }} | {{ c.note || '-' }} |
Mail routing records for a domain are the signposts that tell sending systems which mail servers should receive messages and the order they should be tried. They are often checked during email deliverability troubleshooting, provider migrations, and bounce investigations, because small changes can redirect mail in surprising ways.
This checker looks up those records for the domain you provide and summarizes what was found, including preference values and a few sanity checks that highlight common routing pitfalls. If you paste a website address or an email address, the input is normalized to just the hostname before the lookup runs. You can also compare results from different public resolvers when you suspect caching or propagation is involved.
Imagine you are moving a team mailbox to a new provider and you publish two mail servers with different preference numbers for redundancy. A clean result shows both targets, while warnings point out missing address records, alias chains, or a special no mail signal. Treat the checks as guidance rather than a verdict, since real delivery also depends on the sender, retry behavior, and network conditions. If the domain name itself is sensitive, consider whether policy allows you to query it using third party resolvers.
Recheck after changes and keep snapshots for comparison, because many systems cache routing answers for a while. Once the records look right, confirm with a real test message or your mail provider’s diagnostic logs.
Mail routing records show where email for a domain is expected to land, and a careful lookup helps you spot configuration gaps before they turn into delivery failures.
If you enter example.com and you see two targets with different preference values, that supports redundancy. If you see a no mail signal, treat it as an intentional configuration and do not publish other mail targets with it.
When you are diagnosing a delivery failure, prioritize FAIL items, then revisit WARN items that mention missing address records.
Pro tip: when cutovers are time sensitive, validate the new targets first, then lower TTLs, then switch, and finally recheck from two resolvers.
The goal is a stable target set, clean parsing, and checks that match the story you expect about how mail should flow.
Mail Exchanger (MX) records are Domain Name System (DNS) entries that advertise where email for a domain should be delivered. They are a routing hint for mail transfer agents that need to decide which hostnames to contact.
Each MX answer includes a numeric preference value, commonly called priority, and a target hostname. Senders generally try the lowest priority first, and move to higher priorities when delivery fails or a host is unreachable.
Null MX is a special MX form defined by RFC 7505 where the target is a single dot. It is an explicit signal that the domain does not accept email, and it must not be published alongside other MX targets.
Because delivery depends on both the MX set and the reachability of the target hosts, the tool can optionally resolve each target to IPv4 address records (A) and IPv6 address records (AAAA). It can also detect when a target resolves through a Canonical Name (CNAME) alias, which is discouraged for MX targets.
For quick mail security triage, the tool can also probe related TXT records that indicate the presence of Sender Policy Framework (SPF) at the apex, Domain-based Message Authentication, Reporting, and Conformance (DMARC) at _dmarc, Mail Transfer Agent Strict Transport Security (MTA-STS) at _mta-sts, and TLS Reporting (TLS-RPT) at _smtp._tls. These are presence checks based on version prefixes, not full policy validation.
| Symbol | Meaning | Unit/Datatype | Source |
|---|---|---|---|
D |
Domain name queried after normalization | string | Input |
R |
Resolver selection used for the primary MX query | enum | Input |
p |
MX preference value, often called priority | integer | Derived |
TTL |
Time to live value reported by the resolver for the answer set | seconds | Derived |
t |
Measured query duration for the primary lookup | milliseconds | Derived |
Nmax |
Maximum number of MX targets expanded for host checks | integer | Input |
T |
Record type queried for expansion and related signals | string | Constant |
Suppose you enter admin@example.com. The tool extracts D as example.com, then queries for MX answers and parses each row into (p, exchange).
10 mx1.example.net.
20 mx2.example.net.
After parsing and normalization, the priorities and count might look like this.
A typical interpretation is that mail delivery has at least two advertised targets, and the checker would report redundancy as a PASS if both are non-null.
If the resolver returns a single dot as the MX target, the tool treats it as Null MX and labels the domain as intentionally not accepting email.
.
| Status | Meaning | Typical action cue |
|---|---|---|
| PASS | The observed records satisfy the checker’s rule for that item. | Keep as baseline and recheck after changes. |
| WARN | The result is missing data or suggests a potential issue worth investigating. | Confirm intent, then inspect addresses, aliases, and propagation. |
| FAIL | The observed records violate a rule that commonly breaks routing or interoperability. | Fix configuration, then requery and compare resolvers. |
| INFO | The tool is providing context rather than a pass or fail judgment. | Use as a pointer for deeper, selector specific checks. |
| Parameter | Meaning | Unit/Datatype | Typical range | Sensitivity | Notes |
|---|---|---|---|---|---|
domain |
Domain, URL, mailto URI, or email address to normalize | string | Non-empty hostname | High | IP addresses are rejected. |
resolver |
Resolver preference for the primary MX query | enum | auto, cloudflare, google | Medium | Auto tries Cloudflare first, then Google on hard failure. |
resolve_hosts |
Whether to resolve MX targets to A and AAAA | boolean | true or false | Medium | If disabled, host reachability checks are skipped. |
detect_cname_targets |
Whether to query CNAME for each MX target | boolean | true or false | Medium | If disabled, CNAME related checks become WARN. |
compare_resolvers |
Whether to query Cloudflare and Google for MX and compare sets | boolean | true or false | Medium | Adds evidence rows and a resolver agreement check. |
run_related_checks |
Whether to probe TXT records for related mail policy signals | boolean | true or false | Low | Checks version prefixes only. |
max_targets |
Cap on how many MX targets are expanded for host checks | integer | 0 to N | Low | 0 means no limit; remaining targets are summarized, not expanded. |
timeout_ms |
Abort a single resolver request after this duration | milliseconds | 0 to N | Medium | 0 means no extra timeout beyond the network stack. |
| Constant | Value | Unit | Source | Notes |
|---|---|---|---|---|
| Answer content type | application/dns-json |
MIME | Constant | Set as both the accept header and a ct query parameter. |
| Query parameter names | name, type, ct |
string | Constant | type is uppercased before sending. |
| Record types queried | MX, A, AAAA, CNAME, TXT |
string | Constant | Used for the main lookup, expansion, and related policy probes. |
| Expansion concurrency | 6 | workers | Constant | Limits parallel expansion of target checks to stay responsive. |
priority exchange.1 and 0.| Field | Type | Min | Max | Step/Pattern | Error Text | Placeholder |
|---|---|---|---|---|---|---|
| Domain | string | — | — | Hostname extracted from URL or email | Domain is required. |
example.com |
| Domain must not be IP | string | — | — | IPv4 or IPv6 patterns rejected | MX lookups require a domain, not an IP address. |
— |
| Max targets | number | 0 | — | Step 1 | — | — |
| Timeout | number | 0 | — | Step 100 | — | — |
| Input | Accepted families | Output | Encoding/Precision | Rounding |
|---|---|---|---|---|
| Domain text | Hostname, URL, mailto URI, email address | Normalized ASCII hostname | URL parser hostname rules | Trailing dot removed |
| MX lookup | Resolver JSON answer set | Rows with priority, exchange, and optional host details | Strings, arrays | Query duration rounded |
| Related signals | TXT answers for specific names | Presence status based on version prefixes | String prefix checks | Not applicable |
| Exports | Result tables and state | CSV, DOCX, and JSON downloads | UTF-8 text for CSV and JSON | Not applicable |
The lookup is performed with cross origin HTTPS requests from the page to the selected public DNS over HTTPS resolver endpoint, using query parameters for name and type and requesting application/dns-json responses. A per request timeout can abort slow requests, and the related signal probes perform additional TXT queries at the expected policy names.
Because the queried domain name is sent to a third party resolver as part of the request, treat internal domains as potentially sensitive in regulated environments.
O(n log n) for n answers.Nmax and by which checks you enable.Given the same resolver answers, the normalization, sorting, and check outcomes are deterministic. Differences across resolvers, caches, and timing can produce different answer sets, which is why the resolver comparison option focuses on set level agreement rather than a single snapshot.
:: are treated as likely IP addresses and rejected even if malformed.The DNS concepts used here are defined in RFC 1035, SMTP delivery behavior is specified in RFC 5321, Null MX is defined in RFC 7505, and DMARC is defined in RFC 7489.
No MX records found. and a WARN check, confirm whether the domain should receive mail at all.The script performs resolver queries from your device and renders the results in the page. The provided logic does not write results to local or session storage. Queried domain names are sent to the selected public resolver as part of the request.
Different resolvers can have different cache states, different upstream paths, or different views of split horizon DNS. Enable resolver comparison to see whether the returned MX sets actually disagree, then wait for propagation or verify authoritative data if needed.
WARN indicates a potential issue or missing evidence, such as no MX records, only one active target, a target without A or AAAA, or a check that was disabled. It is a prompt to investigate intent and reachability, not a guarantee of failure.
You can enter a plain domain, paste a URL, paste an email address, or use a mailto URI. The tool extracts the hostname, trims trailing dots, converts it to ASCII when possible, and rejects values that look like IPv4 or IPv6 addresses.
No. The lookup relies on HTTPS requests to the selected public resolver to fetch DNS JSON answers, so it needs network connectivity and outbound HTTPS access.
TTL is the time to live value in seconds returned by the resolver for the answer set. The tool displays the TTL from the first answer record when present, which is helpful for estimating how long caches may keep the current view.
Start by confirming at least one MX target exists and that priorities parse cleanly. If the domain should receive mail, avoid a Null MX dot target. Then resolve each target to A or AAAA to catch missing addresses, and compare two resolvers when you suspect propagation.
No pricing or licensing terms are included in the provided files. Any terms come from the site that hosts this page.