MailDingo

Worked example 4 of 11

A mailing-list post rescued by ARC

Mailing lists add subject tags and footers, which breaks the author's DKIM signature. ARC lets the list pass on what it saw before it changed anything.

Open in the analyser

What to notice

Alex posted to the hikers list from example.org. The list server at lists.example.net added [hikers] to the subject and a footer to the body, then sent a copy to every member. Two things break on the way:

So DMARC fails for example.org, even though nothing malicious happened. Before changing anything, the list recorded what it saw (ARC-Authentication-Results: i=1; lists.example.net; dkim=pass … dmarc=pass) and sealed it (ARC-Seal: i=1 … cv=none). The final receiver verified the seal (arc=pass) and, trusting the list, delivered the message anyway: dis=NONE.

MailDingo shows the DMARC failure as a medium flag here, not a high one, because the ARC chain is intact and the message carries List-Id. Whether the receiver should trust the list's seal is its own decision.

The analysis

Produced by the same code that runs in the analyser.

Check carefully

Forwarded: DMARC failed, but a forwarder vouches for it

A mailing list or forwarding service changed the message, which broke the original authentication; its ARC seal records that the message passed before it was changed. Trust it as far as you trust that list or forwarder.

  • Fromexample.org
  • Sent from198.51.100.7
  • Hops4
  • In transit9 s
  • ViaGoogle

Red flags 1

  • Medium
    DMARC failed, but a forwarder vouches for it

    Your provider recorded dmarc=fail for example.org, but also arc=pass: a forwarding server or mailing list sealed what it saw before it changed the message. This message came through a mailing list, the usual reason. Learn more show in headers

1 note
  • Bounces go to the forwarder or list. Return-Path is at lists.example.net: a mailing list or forwarder re-sent the message with its own bounce address, which is normal. Learn more show in headers

Authentication

Checked by mx.google.com, the server that added the top Authentication-Results field: normally your own provider. show in headers

DMARC DMARC asks: did SPF or DKIM pass for a domain that matches the From address you see? That match is called alignment.

dmarc=fail From domain example.org

Neither SPF nor DKIM passed for a domain aligned with the From domain, and that domain publishes DMARC: the From address is not authenticated.

domain policy p=quarantine · applied: none

What dmarc=fail means

SPF SPF checks whether the server that delivered the message was allowed to send for the envelope (bounce) domain.

spf=pass envelope lists.example.net

The sending server is on the envelope domain's list of permitted senders.

google.com: domain of hikers-bounces@lists.example.net designates 198.51.100.7 as permitted sender

What spf=pass means

DKIM DKIM checks a cryptographic signature that a domain (d=) put on the message, proving that domain handled it and the signed parts were not changed.

dkim=fail signed by example.org selector mail2026

A signature was present but did not verify: the message was changed after signing, or the signature is forged.

What dkim=fail means

ARC ARC records what earlier servers (forwarders, mailing lists) saw, sealed with their signatures, so the final receiver can trust results that forwarding broke.

arc=pass

The ARC chain is intact: every forwarding server's seal verified.

i=1 spf=pass spfdomain=example.org dkim=pass dkdomain=example.org dmarc=pass fromdomain=example.org

What arc=pass means

Alignment with the From address

From domainexample.orgorganisation: example.org
  • SPF lists.example.net passpassed, but for a different organisation: doesn't count for DMARC
  • DKIM example.org failDKIM fail, so it can't count

No passing check is aligned with the From domain, so DMARC can't pass. Alignment is shown in relaxed mode (same organisation); a domain can demand strict mode (exact match) in its DMARC record, which this tool can't look up.

DKIM signatures on the message

  • example.org selector mail2026 · rsa-sha256 · signed 2026-10-15 11:02:07 UTC · covers 5 header fields ↧

ARC chain 2

Each forwarding server that sealed the message recorded what it saw. These are claims by those servers; they only count if your provider trusts the sealer.

  1. i=1 sealed by lists.example.net cv=none
    saw: spf=pass dkim=pass dmarc=pass
    ↧
  2. i=2 sealed by google.com cv=pass
    saw: arc=pass spf=pass dkim=fail dmarc=fail
    ↧

Who it claims to be from

From
Alex Moreau alex@example.org ↧
Return-Path
hikers-bounces@lists.example.net bounces go to another domain ↧
Subject
[hikers] Saturday route: ridge loop, 14 km ↧
Date
Thu, 15 Oct 2026 12:02:07 +0100 = 2026-10-15 11:02:07 UTC ↧
Message-ID
<a81f3c2e-77d0-4b8e-9c1a-5e2f6d7b8c90@example.org> ↧
Mailing list
Weekend hikers <hikers.lists.example.net>
Services seen
Google (Gmail / Google Workspace) mailbox

Route 4 hops

Oldest first. Each server adds a Received line on top, so this is the header list read from the bottom up. Times are converted to UTC.

  1. Written Date header: 2026-10-15 11:02:07 UTC (sender's clock +0100)
  2. +5 s
    lists.example.net
    from mail.example.org 192.0.2.80
    ESMTPS · 🔒 encrypted TLS 1.3
    2026-10-15 11:02:12 UTC (+0200 local) ↧
  3. +3 s
    lists.example.net
    from lists.example.net 127.0.0.1 private
    ESMTP · no TLS recorded
    2026-10-15 11:02:15 UTC (+0200 local) ↧
  4. +6 s
    mx.google.com Google
    from lists.example.net 198.51.100.7
    ESMTPS · 🔒 encrypted TLS 1.3
    2026-10-15 11:02:21 UTC (−0700 local) ↧
    Probably where your provider took the message in from the outside world. The IP here was seen by the receiving server, so it is the most trustworthy origin address in the headers.
  5. +0 s
    2001:db8:4a5:10::51
    SMTP · no TLS recorded
    2026-10-15 11:02:21 UTC (−0700 local) ↧

First to last server: 9 s. Reading delays

The headers 26 fields

sender route authentication ARC

Delivered-To: jo.bennett@example.com
Received: by 2001:db8:4a5:10::51 with SMTP id m4csp4471932pxc; Thu, 15 Oct 2026 04:02:21 -0700 (PDT) explained ↑
ARC-Seal: i=2; a=rsa-sha256; t=1792062141; cv=pass; d=google.com; s=arc-20240605; b=U3ludGhldGljIHNlYWwgaT0y explained ↑
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-help:list-post:list-id:subject:to:date:from:message-id:dkim-signature; bh=U3ludGhldGljIGJvZHkgaGFzaCAy; b=U3ludGhldGljIEFNUyBpPTI= explained ↑
ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=example.org dkim=pass dkdomain=example.org dmarc=pass fromdomain=example.org); spf=pass (google.com: domain of hikers-bounces@lists.example.net designates 198.51.100.7 as permitted sender) smtp.mailfrom=hikers-bounces@lists.example.net; dkim=fail header.i=@example.org header.s=mail2026 header.b=Hq3dZ0aa; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) arc=pass header.from=example.org explained ↑
Return-Path: <hikers-bounces@lists.example.net> explained ↑
Received: from lists.example.net (lists.example.net. [198.51.100.7]) by mx.google.com with ESMTPS id 41be03b00d2f7-7e9f1a2b3c4si1203948.88.2026.10.15.04.02.21 for <jo.bennett@example.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Oct 2026 04:02:21 -0700 (PDT) explained ↑
Received-SPF: pass (google.com: domain of hikers-bounces@lists.example.net designates 198.51.100.7 as permitted sender) client-ip=198.51.100.7; explained ↑
Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=example.org dkim=pass dkdomain=example.org dmarc=pass fromdomain=example.org); spf=pass (google.com: domain of hikers-bounces@lists.example.net designates 198.51.100.7 as permitted sender) smtp.mailfrom=hikers-bounces@lists.example.net; dkim=fail header.i=@example.org header.s=mail2026 header.b=Hq3dZ0aa; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) arc=pass header.from=example.org explained ↑
ARC-Seal: i=1; a=rsa-sha256; d=lists.example.net; s=arc1; t=1792062135; cv=none; b=U3ludGhldGljIHNlYWwgaT0x explained ↑
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=lists.example.net; s=arc1; t=1792062135; h=From:To:Subject:Date:Message-ID:List-Id; bh=U3ludGhldGljIGJvZHkgaGFzaCAx; b=U3ludGhldGljIEFNUyBpPTE= explained ↑
ARC-Authentication-Results: i=1; lists.example.net; spf=pass smtp.mailfrom=example.org; dkim=pass header.d=example.org header.s=mail2026; dmarc=pass header.from=example.org explained ↑
Received: from lists.example.net (localhost [127.0.0.1]) by lists.example.net (Postfix) with ESMTP id 4C1B2A3D9F for <jo.bennett@example.com>; Thu, 15 Oct 2026 13:02:15 +0200 (CEST) explained ↑
Received: from mail.example.org (mail.example.org [192.0.2.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.example.net (Postfix) with ESMTPS id 1A9B8C7D6E for <hikers@lists.example.net>; Thu, 15 Oct 2026 13:02:12 +0200 (CEST) explained ↑
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.org; s=mail2026; t=1792062127; h=from:to:subject:date:message-id; bh=T3JpZ2luYWwgYm9keSBoYXNo; b=Hq3dZ0aaU3ludGhldGljIGF1dGhvciBzaWc= explained ↑
From: Alex Moreau <alex@example.org> explained ↑
To: hikers@lists.example.net
Subject: [hikers] Saturday route: ridge loop, 14 km explained ↑
Date: Thu, 15 Oct 2026 12:02:07 +0100 explained ↑
Message-ID: <a81f3c2e-77d0-4b8e-9c1a-5e2f6d7b8c90@example.org> explained ↑
List-Id: Weekend hikers <hikers.lists.example.net>
List-Post: <mailto:hikers@lists.example.net>
List-Help: <mailto:hikers-request@lists.example.net?subject=help>
List-Unsubscribe: <https://lists.example.net/mailman/options/hikers>, <mailto:hikers-request@lists.example.net?subject=unsubscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"

All names, domains and addresses on this page are fictional: domains under example.com/.net/.org and the reserved .example and .test names (RFC 2606, RFC 6761), IPv4 addresses from the documentation ranges in RFC 5737 and IPv6 from 2001:db8::/32 (RFC 3849). Signatures are placeholders and won't verify.