emailmarketing.net

The Authentication-Results Header

RFC 8601 reference — syntax of the header receivers use to record SPF/DKIM/DMARC/iprev results, ptypes and properties, method result codes, and how to read one.

Reference3 min read

Who it is for ESP operators, Senders

Applies to senders on any platform

To see exactly how a receiver judged your authentication, open a message it delivered and read its Authentication-Results: header. This is the fastest way to find out.

RFC 8601 defines the header. A receiving system adds it at the top of the message to record the outcome of the authentication checks it performed (SPF, DKIM, DMARC, iprev, SMTP AUTH and others). Filters and mail clients (MUAs) later in the path, and people troubleshooting, can then use those results without running the checks again.

Syntax

Authentication-Results: <authserv-id> [version];
    <method>=<result> [reason="..."] [<ptype>.<property>=<value>] ... ;
    <method>=<result> ... ;
  • authserv-id identifies the system that performed the checks, typically by a DNS domain (for example, mx.google.com). It tells you whose verdict you are reading.
  • Each resinfo clause, separated from the others by semicolons, reports the result of one method. It can include a free-text reason and one or more ptype.property=value pairs that identify what was evaluated.
  • Authentication-Results: example.com; none means the receiver performed no checks.
  • Several methods can appear in one header, or the receiver can add several headers (one for each method or each hop).

Property types (ptypes)

ptype Values drawn from
smtp SMTP protocol commands (for example, smtp.mailfrom, smtp.helo, smtp.auth)
header Message header fields or parts of them (for example, header.d, header.i, header.b, header.from)
body Message body content (no properties are registered at present)
policy Local policy information that adds to or overrides the raw results (for example, policy.iprev)

Common methods and their result codes

Method Result codes Key properties
spf pass, fail, softfail, neutral, none, policy, temperror, permerror smtp.mailfrom (the domain or full MAIL FROM address checked), smtp.helo
dkim pass, fail, none, neutral, policy, temperror, permerror header.d (signing domain), header.i (AUID), header.s (selector), header.b (the first bytes of the signature, to tell several signatures apart)
dmarc (registered by RFC 7489) pass, fail, none, temperror, permerror header.from (the RFC5322.From domain evaluated), often with policy.dmarc comments giving the disposition applied
iprev pass, fail, temperror, permerror policy.iprev (the client IP address whose reverse DNS was validated)
auth (SMTP AUTH) pass, fail, none, temperror, permerror smtp.auth (the authenticated identity), smtp.mailfrom
arc (registered by RFC 8617) none, pass, fail See ARC

When policy appears as a result, the check completed but local policy suppressed or overrode the normal result.

Reading one: a worked example

Authentication-Results: mx.google.com;
    dkim=pass header.i=@example.com header.s=s2048 header.b=Kx4pR2;
    spf=pass (google.com: domain of bounce.example.com designates 203.0.113.5
      as permitted sender) smtp.mailfrom=news@bounce.example.com;
    dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=example.com

Google's MX server checked the message:

  • A DKIM signature by example.com (selector s2048) verified.
  • SPF passed for the bounce domain bounce.example.com at IP 203.0.113.5.
  • DMARC passed for the From: domain example.com. Its published policy is reject, and the disposition applied was none, which means the message was delivered.

DKIM is aligned, because d= is the same as the From: domain. SPF passes, and bounce.example.com is aligned with example.com under relaxed alignment. Both paths to a DMARC pass succeeded.

Trust and the removal rule

A sender can forge this header easily, so its security depends on careful handling at the trust boundary:

  • An MTA that conforms to RFC 8601 MUST delete any instance of the header that claims (through its authserv-id) to have been added inside the receiver's own trust boundary but did not actually come from a trusted internal MTA. Border MTAs remove or rename incoming instances that carry their own authserv-id before they add their genuine one.
  • Filters and MUAs should only trust headers whose authserv-id belongs to their own ADMD. Anything else is untrusted data from outside.
  • So when you diagnose deliverability, read the topmost Authentication-Results header whose authserv-id matches the final receiving provider. Lower ones may be out of date (from earlier hops) or forged.

Relationship to other headers

  • Received-SPF: is SPF's own, older header for recording the result at each hop (RFC 7208). In practice, Authentication-Results has replaced it as the single way to report results.
  • ARC-Authentication-Results: reuses exactly this format to record a snapshot of the results at each forwarding hop (see ARC).

Check your own record

The free check reads what your domain publishes in DNS.

In this topic

All 13 in Authentication →