Skip to content

September 7, 2026 ยท 8 min read

How to Read Email Headers: Delivery Path, Delays and Spam Signals

Email headers record every server that touched a message, how long each held it, and whether the sender was who they claimed. Here is how to read them without guessing.

An email arrived late, or landed in spam, or looks like it might be a phishing attempt. The answer is usually recorded in the headers โ€” a block of text your mail client hides because it is nearly unreadable raw. Our email header analyzer parses them in your browser, but the structure is worth understanding whichever tool you use.

Quick answer

What you want to knowWhere to look
Which servers handled itThe Received chain, read bottom-up
Where the delay happenedTimestamps between consecutive Received lines
Whether the sender is genuineAuthentication-Results โ€” SPF, DKIM, DMARC
Why it went to spamA DMARC failure, most often
Who really sent itEarliest Received hop โ€” frequently stripped by big providers

The Received chain runs backwards

This is the single thing that confuses people first.

Every server that handles a message adds a Received header โ€” at the top of the block, not the bottom. The result is that the raw list runs newest to oldest, the reverse of how the message actually travelled.

Received: from relay.provider.net by mx.recipient.com; 10:05:00   โ† arrived last
Received: from smtp.sender.example by relay.provider.net; 10:00:30
Received: from laptop.local by smtp.sender.example; 10:00:00      โ† started here

Read from the bottom up and it becomes a story: a laptop handed the message to its outgoing server at 10:00:00, which passed it to a relay thirty seconds later, which delivered it four and a half minutes after that.

Delays tell you more than totals

Do not look at the total transit time. Look for a single hop that took far longer than the others.

Most hops take a second or two. One hop taking several minutes while the rest are instant is almost always greylisting: the receiving server deliberately rejects the first delivery attempt, expecting a legitimate sender to retry a few minutes later. Spam software often does not retry, so it is an effective and very common filter.

That is not a fault, and there is nothing to fix. It is also completely invisible unless you read the timestamps โ€” from the outside it looks like "email is slow today".

One caveat: those timestamps come from the servers themselves, and server clocks disagree. A hop that appears to take negative time is clock skew, not a delivery that arrived before it was sent.

SPF, DKIM and DMARC

These three decide whether a message is trusted, and they fail for different reasons.

Authentication-Results: mx.recipient.com;
  spf=pass smtp.mailfrom=sender.example;
  dkim=pass header.d=sender.example;
  dmarc=fail

SPF asks whether the server that sent this message is on the list of servers allowed to send for that domain. It breaks legitimately when mail is forwarded, because the forwarding server was never on the original list. An SPF failure alone often means nothing.

DKIM is a cryptographic signature over the message. It survives forwarding, but fails if the content changed in transit โ€” which some mailing lists cause by appending a footer.

DMARC is the one that matters most. It ties SPF and DKIM to the domain a reader actually sees in the From line, and tells the receiver what to do when they disagree. The example above is the interesting case: SPF and DKIM both pass, and DMARC still fails, because they passed for a different domain than the one displayed. That is precisely the gap DMARC exists to close, and it is the strongest single explanation for a message landing in spam.

One thing to remember: these verdicts are the receiving server's findings, recorded at delivery. They are a report, not a live check โ€” a header can say spf=pass for a domain whose policy has changed since.

Return-Path mismatches are not automatically suspicious

If Return-Path shows a different domain from From, that is worth noticing but is not evidence by itself.

It is entirely normal for mailing lists, newsletters and anything sent through a bulk provider โ€” the bounce address belongs to the sending platform rather than the brand. It is also what unsophisticated spoofing looks like.

The authentication block separates them. A legitimate bulk sender passes DMARC despite the mismatch, because the domain owner authorised that platform. A spoof usually does not.

Where to find the headers

Gmail โ€” open the message, three-dot menu, Show original. Outlook โ€” File, Properties, copy the Internet headers box. Apple Mail โ€” View, Message, All Headers. Thunderbird โ€” Ctrl+U for Message Source.

One formatting detail matters if you are reading by hand: headers can fold across multiple lines. Any line beginning with a space or tab is a continuation of the one above, not a new header. A subject read naively therefore comes out truncated.

A note on pasting headers into websites

Headers are more sensitive than they look. They contain your address, the sender's, the subject line, and often internal hostnames and IP addresses from inside a company network โ€” the sort of thing that maps a private network for anyone who collects enough of it.

Most established analysers post all of that to a server. That may be fine for a newsletter; it is a poor idea for a work message. Prefer a tool that parses locally, and verify it: open your browser's network tab and confirm that pasting produces no outbound request.


Analyse a message with the email header analyzer โ€” it reverses the hop order, computes per-hop delays, and reads the authentication results, entirely in your browser. To check a domain's published SPF and DMARC records directly, use the DNS lookup; to identify a sending host, IP address and ISP lookup.

Related Reading

๐Ÿ“„How to Check If Your Password Was Leaked (Without Sending It Anywhere)Typing a password into a website to check it sounds reckless. Here is the method that makes it safe, how to verify the claim yourself, and why a clean result proves less than you think.7 min readโ†’๐Ÿ“„What to Send Your ISP or IT Support When Your Internet BreaksThe details support asks for every time โ€” browser, OS, IP, ISP, latency, device โ€” what each one is actually for, and how to collect all of them in one pass instead of ten.8 min readโ†’๐Ÿ“„Why Text From AI Tools Contains Invisible CharactersNarrow no-break spaces and zero-width characters turn up constantly in text from chatbots. Here is what they are, why the watermark theory is probably wrong, and which ones actually matter.8 min readโ†’๐Ÿ“„Why Won't My MP4 Play? How to Read a Video File's CodecAn .mp4 that refuses to play is almost never the file extension โ€” it is the codec inside. Here is how to find out which one you have, and what to do about it.8 min readโ†’