Diagnosing inbound mail failures
Before investigating filters and mailbox rules, confirm the MX hosts resolve and accept connections. A backup MX pointing at a decommissioned server absorbs mail into nothing.
Checks MX records, their A/AAAA resolution, port 25 reachability and null-MX (RFC 7505).
Lists MX hosts, resolves A/AAAA, probes TCP 25 and detects null MX (RFC 7505) and duplicate priorities.
Checks MX records, their A/AAAA resolution, port 25 reachability and null-MX (RFC 7505).
example.com
MX 10 mail.example.com → A 93.184.216.34 · port 25: reachable
Each MX host is resolved and probed.
Reachable MX hosts accept incoming mail for the domain.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/mx-health" \
-H "Content-Type: application/json" \
-d '{"input":"example.com"}'const res = await fetch("https://yas.sh/api/v1/tools/mx-health", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"input": "example.com"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/mx-health", json={"input":"example.com"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| input | string | Yes | Domain, e.g. example.com |
{ "result": { "nullMx": false, "hosts": [{ "preference": 10, "exchange": "mx1.example.com", "ips": ["93.184.216.34"], "port25": { "open": true } }], "duplicatePriorities": [], "issues": [] } }MX audit: priorities, A/AAAA resolution, STARTTLS-era port-25 probe, null MX (RFC 7505), duplicates.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).The check resolves the domain's MX records, which list mail exchangers with numeric preferences — lower values are tried first, equal values are load-balanced. Each host is then resolved to an address and probed on port 25 to confirm it accepts connections, presents a banner and advertises STARTTLS. A domain with no MX record falls back to its A record under RFC 5321, which is rarely what an operator intends.
Beyond reachability, the health signals that matter are structural: MX hostnames must be names, never IP addresses or CNAMEs (both violate the specification, and CNAME targets break some senders); every host should offer STARTTLS; and a domain that sends no mail should publish a null MX record — a single '.' at preference 0 — to explicitly declare that, rather than leaving the fallback behaviour to chance.
Before investigating filters and mailbox rules, confirm the MX hosts resolve and accept connections. A backup MX pointing at a decommissioned server absorbs mail into nothing.
During a move between providers, both old and new records often coexist. Checking preferences shows which one actually receives mail.
Parked and brand-protection domains should publish a null MX and v=spf1 -all so they cannot be used to spoof or to accept misdirected mail.
An MX host without STARTTLS receives mail in cleartext and will be flagged by senders enforcing MTA-STS.
What this tool deliberately does not do, and where it will disagree with other implementations.