How to read email headers: Received, Authentication-Results and DKIM
By James Bayliss · Updated · Reviewed
In this guide
Getting the full headers
The headers must come from the recipient's copy: that's where the receiver recorded its authentication results.
| Client | Where |
|---|---|
| Gmail (web) | Open the message → ⋮ menu → Show original → Copy to clipboard |
| Outlook (desktop, classic) | Open the message → File → Properties → Internet headers |
| Outlook on the web / new Outlook | ⋯ menu → View → View message details |
| Apple Mail | View → Message → All Headers |
| Thunderbird | View → Message Source |
To send a problem message to someone else for diagnosis, forward it as an attachment. Forwarding inline replaces the original headers with yours.
The Received chain
Each server that handles a message adds a Received: header at the top. So the topmost header is the newest hop, and the bottom one is where the message started:
Received: from mail-relay.example.net (mail-relay.example.net [198.51.100.7])
by mx.recipient.example with ESMTPS id 4b2c...
for <alex@recipient.example>; Mon, 26 Oct 2026 14:02:31 +0000
Received: from app-server.internal (10.0.4.12)
by mail-relay.example.net with ESMTP; Mon, 26 Oct 2026 14:02:29 +0000
Each one tells you:
- from: the name the sending host claimed, and in parentheses what the receiving host verified (its reverse DNS and IP).
- by: the server that added this header.
- with: the protocol.
ESMTPSorESMTPSAmeans the hop was encrypted with TLS, andSAmeans the sender authenticated. - the date after the semicolon: when this server received it.
Subtract consecutive timestamps to find delays. A gap of minutes or hours at one hop points to queuing, greylisting, or a retry after a temporary rejection. Small negative gaps are just clock differences between servers.
Which IP did the receiver see?
For SPF and blocklist purposes, the important IP is the one in the first header added by the receiving organisation, i.e. the hop where mail crossed from the sender's systems into the recipient's. Everything below it was written by systems the sender controls, and can be forged.
Authentication-Results
The receiving server records its verdict in an Authentication-Results header (RFC 8601):
Authentication-Results: mx.recipient.example;
spf=pass smtp.mailfrom=bounces.example.com;
dkim=pass header.d=example.com header.s=selector1;
dmarc=pass (p=REJECT) header.from=example.com
| Part | Meaning |
|---|---|
mx.recipient.example | The server that made the checks (the "authserv-id") |
spf=pass smtp.mailfrom=… | SPF result and the envelope domain it was checked for |
dkim=pass header.d=… | DKIM result and the signing domain; there's one entry per signature |
dmarc=pass header.from=… | DMARC result for the visible From: domain, with the policy in parentheses |
Read DMARC against the domains:
- if
dmarc=failwhilespf=pass, comparesmtp.mailfromwithheader.from; - if
dkim=pass, compareheader.dwithheader.from.
A mismatch is an alignment problem; see DMARC alignment, explained.
Microsoft 365 adds its own fields, such as compauth= (composite authentication) and a reason= code. Treat compauth=fail the same way as a DMARC failure, and use the reason code to search Microsoft's documentation.
Only trust Authentication-Results added by your own receiving servers. A sender can insert a fake one further down; receivers are supposed to remove those, but always use the topmost header.
ARC headers
When a message passes through a forwarder or mailing list that changes it, the intermediary may add ARC-Seal, ARC-Message-Signature and ARC-Authentication-Results (RFC 8617). They record the results the intermediary saw before it modified the message. If a final receiver trusts that intermediary, it can accept a message whose SPF or DKIM broke in transit.
DKIM-Signature
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector1;
h=from:to:subject:date:message-id; bh=…; b=…
d=is the signing domain (compared with From: for DMARC), ands=is the selector; the key is ats._domainkey.d.h=lists the headers covered by the signature. A gateway that rewrites one of them, or a mailing list that adds a footer to the body (bh=), breaks the signature.- Several signatures are normal: your domain plus the platform's own, for example.
Diagnosing with the analyzer
Paste the headers into the Email Header Analyzer. It lays out the hop path with delays, shows what the receiver recorded, re-checks SPF, DKIM keys and alignment against current DNS, and highlights where recorded and current results differ.
From the field: Email headers are extremely helpful to determine what went wrong with email delivery. Getting the headers from the recipient is the larger challenge for IT professionals. Ensure you word your request carefully and provide step by step instructions to maximize your chances of success.
Sources
Check it now
Email Header Analyzer Why did this message arrive late, land in spam, or fail authentication?
Related guides
- DMARC alignment, explained: why SPF passes but DMARC fails
Which domains DMARC compares, relaxed vs strict alignment, and how to fix the most common "SPF pass, DMARC fail" and "DKIM pass, DMARC fail" cases.
- Why is my email going to spam? A diagnostic checklist for admins
A step-by-step checklist for why legitimate mail lands in junk: authentication, alignment, IP and domain reputation, reverse DNS, content and list hygiene.
- DKIM selectors: finding, verifying and rotating keys
What a DKIM selector is, how to find the one your mail platform uses, how to verify the published key, and how to rotate keys without failed signatures.