In Gmail: open the message → ⋮ menu → "Show original" → copy the "Original message" panel. Outlook: File → Properties → Internet headers. Apple Mail: View → Message → All Headers.
Authentication results
Delivery path
All headers
Show full header dump
What an email header tells you
Every email arrives with dozens of headers describing its path, identity, and how various filters scored it. The body is what the recipient reads; the headers are the metadata everyone but the recipient cares about. Spam filters, deliverability auditors, and forensic investigators all start by reading headers.
Paste raw headers here and the tool extracts the parts that matter: the sender's claimed identity, the actual delivery path (every server that handled the message), authentication results (SPF/DKIM/DMARC pass/fail), and anti-spam scores when present. All parsing happens in your browser — nothing is uploaded.
The Received chain — reading delivery path backwards
Every mail server that handles a message prepends its own Received: header. The result is a stack of headers showing the message's path in reverse chronological order — the topmost is the most recent (the receiving server), the bottom-most is the origin. Reading them from bottom to top traces the message from sender to receiver.
Each Received line typically contains: from <claimed-name> (<real-name> [<ip>]), by <receiving-server>, with <protocol>, and a timestamp. The "claimed name" comes from the SMTP HELO/EHLO greeting — anyone can claim anything. The "real name" is the reverse-DNS lookup the receiving server did against the connecting IP — that's verifiable. When claimed and real disagree, that's a flag.
Authentication-Results — pass/fail for SPF/DKIM/DMARC
The receiving server inserts an Authentication-Results: header summarizing what it found:
Authentication-Results: mx.google.com;
dkim=pass header.i=@stripe.com header.s=stripe header.b=abc123;
spf=pass (google.com: domain of bounce@stripe.com designates 54.x.x.x as permitted sender) smtp.mailfrom=bounce@stripe.com;
dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=stripe.com
The three verdicts can be pass, fail, softfail, neutral, none, or temperror / permerror. For legitimate mail, all three should be "pass"; anything else is grounds for spam-folder placement under modern policies.
Headers worth scanning for
- From, Reply-To. The "From" can be cosmetically anything — receivers display this. "Reply-To" overrides where responses go. Phishing often uses lookalike From + real Reply-To pointing to attacker domain.
- Return-Path / envelope-from. The actual bounce address used in the SMTP MAIL FROM command. This is what SPF authenticates against — NOT the displayed From.
- Message-ID. Unique identifier set by the originating server. Format:
<random@domain>. Useful for log correlation and tracing conversations across threads. - X-Mailer, User-Agent. What client composed the message. Suspicious if a "company support" email comes from a random IP using Outlook Express 6.
- X-Spam-Score, X-Spam-Status. Anti-spam engine scores. Each receiver uses their own; reading these helps you understand why a message was filtered.
- List-Unsubscribe, List-Unsubscribe-Post. One-click unsubscribe headers required by Gmail/Yahoo as of 2024 for bulk senders. Missing = spam folder.
Common spoofing patterns to spot
- Mismatched From and Return-Path. Real mail from a domain has matching (or aligned) values. A From of
@yourbank.comwith a Return-Path of@bounce-7821.suspicious.tkis a giant flag. - SPF / DKIM / DMARC all failing or absent. Major senders have all three. Authentication results showing "none" or "fail" across the board suggests the sender doesn't control the claimed domain.
- Received chain doesn't include the claimed sender's infrastructure. If the From is
@google.com, the chain should include Google's mail servers. If the message originated from a random VPS, it's not really from Google. - Recent domain registration. Not in headers directly, but easy to check separately — phishing domains are often <1 month old at time of send.
- Lookalike domains.
@paypa1.com,@arnazon.com, Unicode lookalikes. Read the domain character-by-character on suspicious messages.
Common use cases
- Investigate a suspicious email for phishing indicators
- Trace why a message took N seconds to deliver
- Verify SPF/DKIM/DMARC actually passed at the receiver
- Audit a vendor's sending infrastructure from the receiver side
Frequently asked questions
Where do I find raw email headers?
Gmail: open message → ⋮ menu → "Show original". Outlook desktop: File → Properties → Internet headers. Outlook web: ⋮ → "View message source". Apple Mail: View → Message → All Headers. Thunderbird: View → Message Source.
What does "softfail" mean in Authentication-Results?
SPF returned a "softfail" because the sender used <code>~all</code> in their SPF record. Means "not authorized, but don't reject — mark as suspicious". Receivers typically deliver to spam folder. Stricter is <code>-all</code> (hardfail = refuse delivery).
Why are Received headers in reverse order?
Each mail server prepends its Received header to the top of the message. So the topmost Received is the most recent hop (closest to recipient), bottom-most is the origin. This tool reorders them to show oldest-first in the delivery path display.
The "claimed from" and "real from" in a Received line are different — is that bad?
Maybe. The HELO/EHLO name in SMTP is self-declared (the server can claim anything); the IP+reverse DNS is what the receiver actually saw. Legitimate mail typically has these matching or at least related. A mismatch where the claimed name is your bank and the real name is "vps12-random.suspicious-host.tk" is a strong phishing flag.