Email Header Analyzer
Paste a raw email header to walk the Received hops in order, see the per-hop delay, and read off the SPF/DKIM/DMARC verdicts.
- From"Alice Sender" <alice@example.com>
- Touser@recipient.com
- SubjectHello there
- DateMon, 02 Jun 2026 09:15:38 +0000
- Message-ID<abc123@example.com>
- #1from sender-host.example.com → by mail.example.comMon, 02 Jun 2026 09:15:40 +0000 (UTC)
- #2+2sfrom mail.example.com → by mx.recipient.comMon, 02 Jun 2026 09:15:42 +0000 (UTC)
Everything is parsed locally — no headers leave your browser.
How to use
- Paste the full raw headers (everything before the empty line that separates headers from the body).
- Read the metadata block, the auth badges, and the hop list.
- Read the hops in order — the first is where the message started — and look for the largest delay, which is the server that held it up.
About this tool
ShowHide
Unfolds RFC 5322 continuation lines, pulls out From/To/Subject/Date/Message-ID, parses every Received line (reversed to chronological order) and computes the wall-clock delay between adjacent hops, and extracts the spf/dkim/dmarc verdicts from Authentication-Results. Useful for diagnosing why a message landed in spam, spotting forged Received chains, or pinpointing which MTA introduced a delay.
Received headers are prepended, so the newest hop sits at the top of the raw text and the path reads backwards. Reversing them is what makes a delay legible, but the timestamps come from the clocks of unrelated machines, which is why a hop occasionally appears to take negative time. A small negative gap means two servers disagree by a few seconds, not that a message travelled backwards; a large one is worth a closer look, since it is also what a fabricated header produces.
Only the hops inside your own infrastructure can be trusted at all. Anything before the first server you control was written by whoever sent the message, and forging a plausible-looking chain of earlier Received lines takes no special tooling. Read the chain from your boundary MTA outward and treat the rest as a claim.
Authentication-Results carries the same caveat in sharper form: it is an ordinary header that any host can write. It means something when your own inbound server added it and something else entirely when it arrived with the message, and a failing DKIM signature in particular tells you the message does not match what was signed, not who sent it. Note too that SPF authenticates the envelope sender rather than the From address a recipient sees, which is the gap DMARC alignment exists to close.
The analysis is textual and local. Nothing is looked up live, so a DNS-dependent question such as whether a published SPF record still authorises a given relay has to be checked separately.
Frequently asked questions
Where do I get the raw headers?
In Gmail: ⋮ menu on a message → "Show original". In Outlook: File → Properties → Internet headers. Most other clients have a "View source" or "Show original" option.
Why do hops sometimes show a negative delay?
Servers often disagree on clock by a few seconds, and some MTAs back-date their Received line. Tiny negatives are normal; large negatives (or a missing hop) can suggest a forged header.
How much of the Received chain can I trust?
Only the part added by infrastructure you control. Each server prepends its own line as it accepts the message, so everything above your first trusted hop was written by machines you do not run and can be fabricated wholesale. Read the chain from your side outwards and treat the earliest hops as claims rather than evidence.
The message passed SPF and is still obvious spam — how?
SPF checks the envelope sender's domain against the sending server's address, and that domain does not have to be the one the reader sees. A sender can pass SPF for a domain they own while showing a From address that imitates someone else. DMARC exists precisely to require that the visible From lines up with whatever SPF or DKIM actually authenticated.
Related tools
SPF Record Builder
Compose a Sender Policy Framework TXT record from mechanisms, IPs and includes — with a live DNS-lookup counter and warnings.
Network
TXT Record Splitter (255-Byte Chunks)
Split a long SPF, DKIM or DMARC TXT record into the 255-byte strings DNS requires, in BIND, generic zone-file, Cloudflare or Route 53 syntax.
Network
DKIM Record Builder & Parser
Build or parse a DKIM DNS TXT record — paste your public key, pick selector, key type, hash and flags, and get the record plus its chunked form.
Network
DMARC Record Builder
Compose a _dmarc TXT record — policy, subdomain policy, percentage rollout, alignment, rua/ruf reporting — with safety warnings.
Network
DDS Texture Inspector
Open a .dds texture in the browser: header flags, BC1–BC7 pixel format, the mip chain with sizes and offsets, cube faces, and a decoded preview.
File
xz (.xz) Stream Inspector
Read an .xz container: stream header, every block header and filter chain, the index and the footer — with the true uncompressed size, unpacking nothing.
File