Network

Email Header Analyzer

Paste the raw headers of a message and read what actually happened to it: every server it passed through with the time that hop cost, the SPF, DKIM and DMARC results the receiver wrote down, and the addresses the message claims in its From, Return-Path and Reply-To fields. A subject that arrives as a run of encoded characters is decoded back, and nothing is uploaded — the parsing runs in your browser.

  • Received headers rebuilt into a timeline, with the delay each hop added
  • Authentication-Results read method by method, with what each verdict means
  • From, Return-Path and Reply-To compared, including an address hidden in a display name
  • DKIM signatures broken into tags, with the unsigned-body l= tag called out
  • Encoded subject lines decoded, including Shift_JIS, GB2312 and Big5
0 chars

In Gmail use Show original, in Outlook open Properties or View message source, in Apple Mail turn on All Headers.

Masks mailbox names and address literals in what you copy or download. Domains stay, because that is what the authentication discussion is about.

Paste a header block to see the delivery path, the authentication results and the identities the message claims.

Overview

A header block answers three questions: where the message went, what the receiver concluded about it, and who it claims to be from. Each section below takes one of them.

  1. 01

    The path, with the time each hop cost

    Received headers are reversed into the order the message travelled and each timestamp is subtracted from the one before it, so a six-minute queue stops being invisible. The slowest hop is marked, because that is the answer to why a message arrived late.

  2. 02

    Authentication read, not just echoed

    Every method in the Authentication-Results header is shown with its result and what that result means in practice, including the difference between a soft fail and a fail, and between no record and a failed one.

  3. 03

    The addresses compared against each other

    From, Return-Path, Reply-To and Sender are laid out side by side, and an address hidden inside a display name is called out on its own — that is the spoof most clients hide by showing only the name.

  4. 04

    DKIM signatures taken apart

    Domain, selector, algorithm and the list of signed headers, with the two tags worth noticing: an l= that leaves the rest of the body unsigned, and an h= that never covered From in the first place.

  5. 05

    Encoded subject lines decoded

    A subject written as =?UTF-8?B?…?= is decoded on the spot, and so are the legacy charsets still in circulation — Shift_JIS, GB2312, Big5, ISO-8859. The garbled subject in a ticket is usually just this.

  6. 06

    Nothing leaves the page

    Headers carry recipient addresses, internal hostnames and private address ranges. The parsing runs in your browser, and a redaction toggle masks mailbox names and address literals in whatever you copy out.

How to use

Get the original message rather than the rendered one, paste it, and read the sections in order.

  1. 01

    Open the raw message: Show original in Gmail, Properties or View message source in Outlook, All Headers in Apple Mail.

  2. 02

    Paste the whole thing into the input. Everything after the first blank line is the body and is ignored.

  3. 03

    Read the verdict and findings first — they name what is wrong before you go looking for it.

  4. 04

    Check the authentication section for what the receiver recorded. Start with the topmost normal Authentication-Results entry, then use its authserv-id to decide whether that mail system is one you trust.

  5. 05

    Follow the delivery path from the origin down, looking for the hop that carries the delay.

  6. 06

    If a signing domain needs checking against DNS, open it in the SPF and DMARC checker from the signature card.

Details

Most of the difficulty in reading headers is in the details that look like noise. These are the ones the parsing is built around.

  • Folded headers are unfolded first, so a Received line split across five indented lines is read as one value rather than five fragments
  • The path is rebuilt in reverse, because servers prepend their Received header rather than appending it
  • A hop stamped earlier than the one before it is reported as clock skew instead of being shown as a negative delay
  • The summary uses the topmost normal Authentication-Results entry, while making clear that its authserv-id — not its position alone — determines whether the claim is trustworthy
  • ARC sets are counted separately, since a resealed message is the normal shape for anything that came through a mailing list
  • Address literals are taken from the bracketed form, so a number inside a hostname or a TLS comment is not mistaken for the sender

Use cases

Headers get read for two reasons: something arrived late, or something arrived that should not have.

  1. Find where a delayed message waited

    A message that took twenty minutes waited somewhere specific. The per-hop delays name the server that held it, which is the difference between a sender problem and a receiver problem.

  2. Check whether a suspicious message is what it claims

    The display name says one company and the address says another, or DMARC failed outright. Both are visible in seconds, and neither is visible in the client.

  3. Work out why a message went to spam

    The filter usually left its reasoning behind: a SpamAssassin score with the rules that fired, or a spam confidence level from Microsoft. That tells you whether to fix authentication or reputation.

  4. Confirm your own mail is signing correctly

    Send yourself a message and read the DKIM signature: which domain signed, which selector, and whether the From header is inside the signature at all.

  5. Explain a forwarded message that failed DMARC

    Forwarding breaks SPF and mailing lists often break DKIM. The ARC sets and the hop list show where the message was resealed and by whom.

  6. Read a subject line that arrived as gibberish

    A subject shown as =?UTF-8?B?…?= or as question marks in a log is decoded here, along with the older charsets that still turn up in mail from legacy systems.

  7. Attach evidence to a ticket without leaking addresses

    The redaction toggle masks mailbox names and address literals while keeping the domains, so the summary can be pasted into a shared tracker.

  8. Teach someone to read headers

    Each verdict carries its plain meaning, so a message with a real problem doubles as the explanation of what SPF, DKIM and DMARC actually assert.

See also

A header block says what happened to one message; the records behind it belong to a domain. To read the SPF, DKIM and DMARC a domain publishes, use the SPF & DMARC Checker. To query any record type directly, or trace a delegation from the root servers down, there is the DNS Lookup. And when the address in the first Received header needs a name, look it up with the IP Address Lookup.

Best practices

A few habits make header reading faster and keep the conclusions honest.

  • Take the original message rather than a forward. Forwarding rewrites the headers, so the ones you end up reading describe the forward, not the message you care about.
  • Start with the topmost normal Authentication-Results entry, but trust it only after checking that its authserv-id belongs to a mail system you trust. Earlier entries are context, not independent proof.
  • Compare From with the SPF identity recorded as passing when it is available. Return-Path is useful context, but it is not a substitute for the identity SPF actually evaluated.
  • Treat per-hop delays as approximate until the timestamps are consistent. One wrong server clock makes every delay around it meaningless.
  • Check the h= tag of a DKIM signature, not just its presence. A signature that does not cover From protects less than it appears to.
  • Redact before pasting headers into a shared ticket. Mailbox names, internal hostnames and private ranges are all in there.

Limitations

Everything here comes from text you pasted in. That draws a firm line around what the result can tell you.

  • DKIM signatures are read, not verified. Verification needs the untouched message body and the public key from DNS, and any change in transit invalidates a signature that was perfectly good when it was written.
  • Authentication results are the receiver’s claim, not an independent check. This page cannot re-run SPF or DMARC; it reports what the receiving server recorded.
  • Headers below the last trusted hop can be forged. Everything a sender writes — including Received headers that look like a plausible history — is under their control.
  • Domain alignment is compared with the Public Suffix List, which ships with the page rather than being queried. RFC 9989 derives the DMARC organisational domain from a DNS tree walk instead, so a strict evaluation can still group a domain differently.
  • No DNS query is made. Whether a selector is still published, or whether a sending address belongs to the network it claims, needs a lookup this page does not perform.
  • A filter score describes one receiver on one day. The same message can score differently elsewhere, and a clean score is not evidence that a message is safe.
  • Only the header block is read. Everything after the first blank line, including attachments and any tracking inside the body, is ignored.

FAQ

Common questions about reading email headers, tracing hops, and what a header block can and cannot prove.

How do I see the raw headers of an email?

In Gmail, open the message, use the three-dot menu and choose Show original. In Outlook on the web, open the three-dot menu and choose View message source; in the desktop client it is File, then Properties, and the box labelled Internet headers. In Apple Mail, turn on View, then Message, then All Headers. Copy the whole block and paste it in — a complete message works too, since everything after the first blank line is ignored.

How do I read email headers to find where a message was delayed?

Each server that handles a message adds a Received header at the top with the time it took the message, so the list runs backwards. Reversing it gives the real order, and the gap between one timestamp and the next is how long the message waited to be accepted by that server. A hop of a minute or more is where the delay lives. Do check for clock skew first: if one server is set wrong, the delays around it are meaningless, which is why a hop stamped before the previous one is reported rather than shown as a negative number.

Can email headers be faked?

The fields the sender writes can be faked, including From, Reply-To, Date and any Received lines invented to make a route look longer. Headers added after the message left the sender’s control are useful only within a trust boundary. Start with the topmost normal Authentication-Results entry, then check whether its authserv-id names a mail system you trust. Earlier entries are older claims, not independent proof; if the chain starts at a hostile server, so can its record.

What does Authentication-Results tell me?

It records what the receiving server concluded when it ran SPF, DKIM and DMARC. spf=pass means the sending server was authorised for the envelope domain. dkim=pass means a signature verified, so the signed parts arrived unaltered. dmarc=pass means one of those passed for a domain that matches the From address a reader sees — which is the part that ties authentication to the identity being claimed. This tool shows each verdict with what it means in practice; it reports the receiver’s conclusion rather than re-running the checks.

Why did DMARC fail when SPF passed?

Because DMARC also requires alignment. SPF checks the envelope sender in Return-Path, which for mail sent through a provider is usually a bounce address on the provider’s own domain. That passes SPF for the provider while the From header shows yours, so the two do not align and DMARC fails anyway. DKIM signing with your own domain is the more robust half, since DKIM alignment survives forwarding while SPF does not.

What is the l= tag in a DKIM signature?

It sets a body length, so the signature covers only the first l bytes. Anything appended after that point verifies exactly as before, which means someone can add content to a signed message without breaking the signature. It exists to survive mailing lists that append footers, and it is why this tool flags it: a signature that says pass over an unknown fraction of the body is weaker than one that covers all of it.

Why is my subject line full of characters like =?UTF-8?B?

That is RFC 2047 encoding. Header fields are ASCII, so any other script is base64 or quoted-printable encoded with its charset named in front. Clients decode it before display, which is why the encoded form only shows up in a log, a ticket or a copied header block. This tool decodes it, including the legacy charsets — Shift_JIS, GB2312, Big5 and the ISO-8859 family — that still appear in mail from older systems.

Can I find the sender’s real IP address in the headers?

Sometimes. The bottom Received header records the address the first receiving server saw, which for a message sent from a mail client is often the sender’s network. But when the message came from a webmail interface that address belongs to the provider, and a sender who controls their own server can write earlier Received headers saying anything at all. Only the hops added by servers you trust are evidence, and the addresses in them are frequently private ranges that identify nothing outside that network.

Does this tool upload my email?

No. The parsing runs in your browser, and nothing is sent anywhere. That matters more here than for most tools, because a header block routinely contains the recipient’s address, internal hostnames, queue ids and private address ranges. There is also a redaction toggle that masks mailbox names and address literals in whatever you copy or download, for when the result has to go into a shared ticket.

What is ARC, and why does my forwarded mail have it?

Forwarding breaks authentication: SPF fails because the forwarder is not on the original domain’s list, and mailing lists often break DKIM by rewriting the subject or appending a footer. ARC lets an intermediary record what it saw before it made those changes, and seal that record, so the final receiver can decide whether to trust it. Several ARC sets simply mean the message passed through several such intermediaries — it is the normal shape for anything that arrived via a list.

What does the display name warning mean?

It means the name shown before the address contains an address of its own, and it is not the one the message came from. Since most clients show only the display name, a message can appear to be from a bank while actually being sent from an unrelated mailbox. It is the cheapest spoof there is, it needs no compromised infrastructure, and it is invisible until you look at the raw From header.

How is this different from the SPF and DMARC checker?

They look at opposite ends of the same problem. The checker reads what a domain publishes in DNS — its SPF chain, DMARC policy and DKIM keys — and judges the configuration. This tool reads one delivered message and reports what actually happened to it. Use the checker while setting a domain up, and this one when a specific message went wrong. The signature cards link across, so a signing domain found here can be checked there in one click.

Related tools

Check the records behind a signing domain, query DNS directly, or find out whose network a sending address belongs to.