← Deliverability Recovery Guides
EXECUTIVE ENGINEERING BRIEFING
Published: October 2026 • Author: Fred Dawson • Deliverability & MTA Architecture Standard

Executive Summary: Forensic guide to analyzing email headers for deliverability issues: decoding Authentication-Results, tracing Received hops, validating ARC seals, and diagnosing delivery delays.

Authentication-Results Auth Parsing RFC 8601 diagnostic block
Received: Chains Hop Trace Bottom-to-top routing
ARC-Seal Valid Cryptographic Seal Forwarding integrity
< 2.0s Wire Hop Latency Threshold MTA transport benchmark

This guide explains how to read each significant header field, extract actionable diagnostic information from the Received chain and Authentication-Results block, and use headers to diagnose the eight most common deliverability failure patterns.

How to Access Full Headers

Email clients hide full headers by default because they’re verbose and technical. Here’s how to access them in major clients:

  • Gmail: Open message → three-dot menu (⋮) next to Reply → “Show original” → new tab shows full raw headers and message source
  • Outlook desktop: Double-click to open message → File → Properties → “Internet headers” section shows headers
  • Outlook Web (OWA): Open message → three-dot menu → “View message details”
  • Apple Mail: View → Message → All Headers; or View → Message → Raw Source for full source
  • Yahoo Mail: Open message → More (three-dot) → “View raw message”
  • Thunderbird: Open message → View menu → Message Source (Ctrl+U)

For deliverability diagnosis, always use “Show original” or equivalent — not just the headers view — to see the full raw output including SMTP transaction IDs that can help you correlate with mail server logs.

The Received Chain: Reading Routing Bottom-to-Top

The most important structural feature of email headers: read the Received chain from bottom to top. Each server that handles the message prepends a new Received header, so the oldest (first hop) is at the bottom and the most recent (recipient’s server) is at the top.

Header fieldWhat it tells youAction if problematic
Authentication-ResultsSPF/DKIM/DMARC pass or fail on each checkFix whichever auth check fails — start with DKIM alignment
Received: chainFull delivery path from sender to recipient MXUnexpected hops may indicate routing issue or relay misconfiguration
X-Spam-Status / ScoreSpamAssassin score — negative is good, > 5 = likely spam folderIdentify which SpamAssassin rules fired and address each
X-Forwarded-ToFinal delivery address (Gmail alias or forwarding)Forwarded mail bypasses SPF — ensure DKIM covers for DMARC alignment
DKIM-Signature d= valueSigning domain — must match From: for DMARC alignmentReconfigure ESP to sign with your domain, not their sending domain
Return-Path / envelope-fromBounce destination and SPF evaluation domainShould be a subdomain of your own domain for SPF alignment
Full header analysis — email landing in inbox (annotated)
pmta-config.conf (Wire Throttling) Console / Config
Return-Path: <bounce+1234@em.yourcompany.com>
  # The envelope sender / bounce address — must match SPF

Received: from mail8.em.yourcompany.com (mail8.em.yourcompany.com [167.89.x.x])
  by mx.google.com with ESMTPS id abc123xyz
  for <user@gmail.com>; Mon, 7 Apr 2025 09:14:22 +0000
  # Sending IP: 167.89.x.x — should be on your SPF record

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=yourcompany.com; s=smtp2025; h=from:to:subject:date;
  bh=ABC123xyz==; b=MFQCIB...
  # d= must match From: domain for DMARC alignment

Authentication-Results: mx.google.com;
  dkim=pass header.i=@yourcompany.com header.s=smtp2025;
  spf=pass (domain of bounce@em.yourcompany.com designates 167.89.x.x);
  dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=yourcompany.com;
  # All three pass + DMARC alignment confirmed

X-Spam-Status: No, score=-3.2 required=5.0
  # Negative score = well under spam threshold
pmta-config.conf (Wire Throttling) Console / Config
Received: from mx.google.com (mx.google.com [74.125.24.27])
        by mx.yourdomain.com with ESMTPS id abc123
        for <user@yourdomain.com>;
        Fri, 12 Apr 2026 10:05:22 +0000

Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [209.85.210.46])
        by smtp.googleapis.com with ESMTPS id y5si1234567pfn.18.2026.04.12.03.05.21
        for <user@yourdomain.com>;
        Fri, 12 Apr 2026 03:05:21 +0000

Received: from yourserver.com (yourserver.com [203.0.113.10])
        by mail.sender.com with ESMTPS id z7si987654abc.15.2026.04.12.03.05.18
        for <user@yourdomain.com>;
        Fri, 12 Apr 2026 03:05:18 +0000

Reading Received headers for diagnostic information

Each Received header contains:

  • from: The hostname and IP of the server sending the message (in parentheses)
  • by: The receiving server’s hostname
  • with: The protocol used (SMTP, ESMTP, ESMTPS = SMTP with TLS, ESMTPSA = with authentication)
  • id: The message ID on that server — useful for cross-referencing server logs
  • for: The recipient address
  • timestamp: When this hop occurred

Diagnosing delays from Received timestamps

Compare timestamps between consecutive Received headers to identify where delays occurred. Reading bottom-to-top, the time difference between each hop shows where the message spent time:

Terminal / Diagnostic Shell Console / Config
# Example: Message took 15 minutes between hops 2 and 3 (counting from bottom)
Hop 3 (top): ...03:20:15 +0000
Hop 2 (mid): ...03:05:21 +0000  ← 15-minute gap here
Hop 1 (bot): ...03:05:18 +0000  ← normal 3-second gap

A 15-minute gap at a specific hop usually means that server’s queue was backing up, had a connection issue with the next hop, or experienced a temporary failure and retried. If the slow hop is the recipient’s MX server, the cause is usually recipient-side queue pressure or greylisting.

Authentication-Results: The Deliverability Diagnostic Block

The Authentication-Results header is added by the receiving server and contains the outcome of every authentication check performed on the message. This is the single most important header for deliverability diagnosis.

pmta-config.conf (Wire Throttling) Console / Config
Authentication-Results: mx.google.com;
       dkim=pass header.i=@yourdomain.com header.s=mail header.b=AbCdEfGh;
       spf=pass (google.com: domain of bounce@yourdomain.com designates
                 203.0.113.10 as permitted sender)
                 smtp.mailfrom=bounce@yourdomain.com;
       dmarc=pass (p=QUARANTINE sp=REJECT dis=NONE) header.from=yourdomain.com

Reading each authentication field

dkim= values:

  • pass — DKIM signature verified successfully
  • fail — Signature present but failed verification (key mismatch, message modification, or wrong selector)
  • none — No DKIM signature was found on the message. This is an authentication gap.
  • permerror — DNS error resolving the DKIM record; or DKIM signature syntax error
  • temperror — Transient DNS lookup failure; will likely succeed on retry

Additional DKIM fields when pass: header.i = signing domain, header.s = selector used, header.b = first 8 characters of the signature (for correlation)

spf= values:

  • pass — The sending IP is authorised for the envelope sender domain
  • fail — The IP is explicitly not authorised (-all in SPF record)
  • softfail — The IP is not authorised but the domain uses ~all (soft enforcement)
  • neutral — The domain makes no assertion about this IP (?all)
  • none — No SPF record found for the envelope sender domain
  • permerror — SPF record has a permanent error (syntax error, too many lookups)
  • temperror — Transient DNS error during SPF evaluation

Additional SPF fields: smtp.mailfrom = the envelope sender domain that was checked (not the From: header domain)

dmarc= values:

  • pass — DMARC evaluation succeeded: at least one of SPF or DKIM passed and aligned
  • fail — Neither SPF nor DKIM passed with alignment to the From: domain
  • bestguesspass — No DMARC record exists, but sender appears legitimate by heuristic
  • none — The domain has no DMARC record published

Additional DMARC fields: p= = the policy the sending domain has published, dis= = the disposition actually applied (what the receiver did)

Key Diagnostic Scenarios

Scenario 1: Authentication looks fine but email is in spam

rfc8601-headers.eml (Diagnostic Trace) Console / Config
Authentication-Results: mx.google.com;
   dkim=pass ...
   spf=pass ...
   dmarc=pass ...

If all three authentication checks pass but the message went to spam, authentication is not the problem. Look for:

  • X-Spam-Score or X-Spam-Status headers showing high content score
  • X-Google-DKIM-Signature absence (Gmail internal headers)
  • Low domain or IP reputation — not visible in headers, diagnosed via Postmaster Tools and SNDS
  • Recipient’s previous engagement with your domain — no headers available, but Postmaster Tools spam rate chart is the proxy

Scenario 2: DKIM fail with valid DNS record

pmta-config.conf (Wire Throttling) Console / Config
Authentication-Results: mx.google.com;
   dkim=fail header.i=@yourdomain.com header.s=mail ...

DKIM passes only when the signature is valid against the current DNS public key AND the message body hasn’t changed since signing. Common causes of dkim=fail when you know the DNS record is correct:

  • Message modified in transit: A mail server between the sender and recipient altered the message (rewriting headers, adding footers, modifying content). DKIM signs a hash of the message; any modification breaks the signature.
  • Canonicalization mismatch: The DKIM signature uses simple/simple canonicalization but an intermediate server normalized the message in a way that changed the body hash. Use relaxed/relaxed canonicalization to tolerate minor normalizations.
  • DNS caching a stale key: If you recently rotated DKIM keys but the receiving server’s DNS cache is still serving the old public key, verification of messages signed with the new key will fail. This clears automatically as TTL expires.
  • Key mismatch (wrong selector): The s= value in the DKIM-Signature header points to a selector whose DNS record does not match the private key used to sign. Verify by querying: dig TXT mail._domainkey.yourdomain.com and confirming the public key matches your private key.

Scenario 3: SPF pass but DMARC fail

pmta-config.conf (Wire Throttling) Console / Config
Authentication-Results: mx.google.com;
   spf=pass smtp.mailfrom=bounce.sendingplatform.com;
   dkim=none;
   dmarc=fail (p=QUARANTINE) header.from=yourdomain.com

SPF passed but DMARC failed. This is an alignment failure. The smtp.mailfrom shows bounce.sendingplatform.com — the SPF check passed for the sending platform’s domain, but DMARC requires alignment with header.from=yourdomain.com. The platforms’ domain and your From: domain do not match organisationally.

Solution: Configure a custom bounce domain (Return-Path domain) on the sending platform to use a subdomain of your own domain, e.g., bounce.yourdomain.com. This makes the SPF-authenticated domain align with your From: header domain.

Scenario 4: Forwarded email failing authentication

pmta-config.conf (Wire Throttling) Console / Config
Received: from forwarder.domain.com ...
Authentication-Results: mx.google.com;
   spf=fail ...
   dkim=fail ...

Email forwarding inherently breaks SPF (because the forwarding server’s IP isn’t authorised in the original sender’s SPF record). DKIM may also break if the forwarder modifies the message. This is normal and expected — it’s not a configuration problem with your sending. The solution for organisations receiving forwarded mail is ARC (Authenticated Received Chain), which some forwarders implement to preserve the original authentication results.

Scenario 5: 550 5.7.26 rejection (Gmail bulk sender requirement)

Terminal / Diagnostic Shell Console / Config
Action: failed
Status: 5.7.26
Diagnostic-Code: smtp; 550-5.7.26 This message does not have authentication
  information or fails to pass authentication checks. To best protect our
  users from spam, the message has been blocked.

This specific Gmail error means the message failed Gmail’s 2024 bulk sender requirement: SPF, DKIM, and DMARC must all be configured for senders sending 5,000+/day to Gmail. Check:

  1. SPF record exists and passes for your sending IP
  2. DKIM is configured and signing outbound mail (verify via test email)
  3. DMARC record is published (p=none minimum)
  4. All three are aligned with your From: header domain

Header Analysis Tools

ToolURLBest for
MXToolbox Header Analyzermxtoolbox.com/EmailHeaders.aspxClear visual breakdown, IP geolocation, spam score
Google Admin Toolboxtoolbox.googleapps.com/apps/messageheaderGmail-specific delivery timeline
Mail Header Analyzer (Azure)mha.azurewebsites.netHop-by-hop delay visualisation
MailTestedmailtested.com/tools/email-header-analyzerAuthentication detail with alignment checking
Postmark DMARCdmarc.postmarkapp.comDMARC-specific report parsing

For most deliverability diagnosis, paste headers into MXToolbox first. If the issue is specifically DMARC-related, MailTested provides more granular alignment detail. If you’re debugging timing/routing, Google Admin Toolbox’s delivery timeline visualisation is clearest.

Header analysis — email landing in spam folder (annotated)
pmta-config.conf (Wire Throttling) Console / Config
Return-Path: <bounce@esp-mailer.net>
  # Envelope sender = ESP domain, not your domain

Authentication-Results: mx.google.com;
  dkim=pass header.i=@esp-mailer.net;       ← ESP domain, NOT yours
  spf=pass (domain of bounce@esp-mailer.net); ← ESP domain again
  dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yourcompany.com;
  # DMARC FAILS — neither SPF nor DKIM aligns with yourcompany.com

X-Spam-Status: Yes, score=1.8 required=5.0
  # Positive score pushes toward spam

X-Google-Spam-Reason: dmarc_softfail,low_domain_reputation
  # Google internal signal: DMARC soft fail + domain reputation issue
📋 Client case — FinTech startup — transactional 2FA and account alerts

Situation: Users reporting 2FA codes arriving in spam at Outlook and Gmail. No bounces. Authentication passing. Issue not detectable from MTA logs alone.
Action taken: Pulled raw headers from an affected Outlook delivery. Found X-MS-Exchange-Organization-SCL: 5 (spam confidence > 4 = junk folder). Root cause: Subject line contained “security code” and “verify” — high SpamAssassin score. Separately, X-Spam-Status showed score=2.1 at Gmail from URIBL_BLOCKED rule firing on the link domain.
Outcome: Rewrote subject lines to avoid trigger words. Moved link tracking to a subdomain with clean reputation. Gmail spam rate dropped to 0.2% within 48h. Outlook SCL dropped to -1 on resend test. 2FA delivery to inbox: 99.7%.

▶ Header diagnosis workflow
1
Obtain the raw header — In Gmail: open email > three-dot menu > Show original. In Outlook: File > Properties > Internet headers. Copy the full text.
2
Read Authentication-Results first — Check dkim=, spf=, and dmarc= values. A fail on any of these is the likely primary cause of inbox problems.
3
Check DKIM d= alignment — The d= value in DKIM-Signature must match the domain in the From: header. If it shows your ESP domain instead of yours, DMARC alignment fails.
4
Read X-Spam-Status for rule breakdown — The hits= section lists every SpamAssassin rule that fired. Google the rule names to understand what triggered each one.
5
Trace the Received: chain bottom-up — Each hop adds a Received: header. Read from bottom (sending server) to top (recipient inbox). Unexpected IP hops indicate relay misconfiguration.

Production Deliverability Recommendation

When recovering from sender reputation degradation or blacklist incidents, never attempt to bypass carrier filters through burner domains or unverified IP pools. Durable rehabilitation requires identifying root cause vulnerabilities, establishing strict cryptographic DNS authentication, enforcing in-band bounce suppression, and routing traffic through dedicated bare-metal MTAs with custom connection pacing.

Deliverability Remediation Roadmap

Step 1 (Incident Containment): Quarantine distressed sending streams, halt compromised campaigns, and file verified delisting petitions.
Step 2 (Technical & Audience Audit): Inspect SMTP diagnostic codes, enforce RFC 8058 one-click unsubscribes, and prune recipients inactive beyond 30 days.
Step 3 (Engagement-First Re-Warm): Re-introduce outbound traffic via strict mathematical ramping ladders with automated rate-limit backoff.

FD
Fred Dawson

Deliverability Architect & MTA Systems Engineer at AutoSMTP. Specialises in dedicated MTA cluster design, carrier-grade IP warming protocols, and ISP reputation telemetry across high-volume sending fleets.

Enterprise Mail Infrastructure

The AutoSMTP Dedicated Outreach Fleet Advantage

AutoSMTP provisions and manages enterprise-grade PowerMTA and KumoMTA clusters on dedicated bare-metal servers. Complete domain isolation, automated gas-pedal warming, and proactive deliverability telemetry.

Turnkey Dedicated Bare-Metal Clusters

Pre-configured PowerMTA and KumoMTA installations on enterprise hardware with dedicated IPv4 subnets and predictable flat pricing.

Automated Gas-Pedal IP Warming

Dynamic ramp-up algorithms that modulate hourly dispatch volume against real-time deferrals and Google Postmaster spam ratios.

Native FBL & Socket Interceptors

Automated RFC 3464 bounce ingestion, Yahoo/Outlook CFL complaint webhooks, and instant in-band suppression sync across all fleet nodes.

Strict Cryptographic Alignment

2048-bit DKIM key rotation, strict DMARC enforcement (p=reject), FCrDNS PTR verification, and automated TLS cipher hardening.

Ready for Dedicated Sending Infrastructure?

Eliminate shared pool throttle penalties and take complete control over your mail delivery with custom-tuned MTA clusters.

Deploy Dedicated MTA Fleet →