Original messages This site is an index. The complete original emails — full headers, bodies and attachments, with DKIM signatures intact — are in the torrent. How to verify them →
◆hexane.cc

Verification

How to check this archive yourself

A fair criticism of the site as first published: the browse table shows summaries, not original messages. That is a real gap, and it is worth being precise about why it exists and how to close it.

The short version. This website is an index. The original messages — full headers, bodies, attachments, byte for byte — are in the torrent, inside standard .mbox files. Download the archive, open those files in any mail client, and you have exactly what the party's servers held. Nothing on this site replaces that, and nothing on this site should be cited as a primary source.

Why the site shows summaries

The archive holds roughly 421,000 messages. Rendering them as individual pages would mean publishing an indexed, searchable copy of every private message in the corpus — including the many that concern ordinary members and people who wrote to the party, not public figures. The browse table therefore carries the assessment and a short description, and points at the underlying record.

That is a deliberate limit on this website, not on the archive. Every claim in the table can be traced back to a real file. The rest of this page shows how.

1. Get the archive

Two torrents carry identical content. Take either.

variantwhat it isuse when
packed Eight .tar files, one per top-level directory. Default. Transfers far faster because BitTorrent handles a few large files much better than 103,000 small ones.
loose 103,000 individual files, same content. If you want to browse files without unpacking anything.

Both magnets are on the browse page. Verify the download completed — the client checks every piece against the hash in the torrent, so a finished download is byte-identical to the published copy.

2. Unpack the packed variant

# one tar per top-level directory
for f in *.tar; do tar -xf "$f"; done

# result
01_EMAIL/  02_DATABASES/  03_DOCUMENTS/  04_TABULAR_DATA/
05_CREDENTIALS_AND_KEYS/  06_MEDIA/  99_FOR_JOURNALISTS/

Nothing is compressed inside the tars — they are plain archives, so tar -tf 01_EMAIL.tar | head lists contents without extracting.

3. What an mbox file is

01_EMAIL/ contains one directory per mailbox, and inside each, one or more part-NN.mbox files.

mbox is the oldest and most widely supported mailbox format. A single file holds many complete messages, concatenated. The separator is a line beginning with the five characters From — note the space, and note there is no colon, which distinguishes it from the From: header inside each message.

From [email protected] Mon Jan  1 00:00:00 2020
Return-Path: <[email protected]>
Received: from mail.afd.de (mail.afd.de [1.2.3.4])
        by mx.example.de with ESMTPS id abc123
        for <[email protected]>; Mon, 3 Jun 2024 10:22:11 +0200
DKIM-Signature: v=1; a=rsa-sha256; d=afd.de; s=selector1;
        h=from:to:subject:date:message-id; bh=...; b=...
From: Alice Weidel <[email protected]>
To: [email protected]
Subject: Re: Landesvorstand
Date: Mon, 3 Jun 2024 10:22:03 +0200
Message-ID: <[email protected]>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_Part_1"

------=_Part_1
Content-Type: text/plain; charset="utf-8"

Der Landesvorstand hat beschlossen ...

------=_Part_1
Content-Type: application/pdf; name="Protokoll.pdf"
Content-Transfer-Encoding: base64

JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGgg...
------=_Part_1--

From [email protected] Mon Jan  1 00:00:00 2020
... next message ...

Every message keeps its original RFC 822 headers and its original MIME body. Attachments are still base64 inside the message, exactly as they travelled. The archive was deduplicated by Message-ID, so a message that existed on three systems appears once.

Open it in a real mail client

# Thunderbird: point Local Folders at the directory, or
#   File > Open > Saved Message, then pick the .mbox

# mutt
mutt -f 01_EMAIL/[email protected]/part-01.mbox

# notmuch — best for searching across the whole corpus
notmuch new --root=01_EMAIL
notmuch search 'from:gauland and subject:spende'

# or just grep the bytes, mbox is plain text
rg -i 'Untreue|Veruntreuung' 01_EMAIL/

Extract one message as a standalone .eml

Mail clients can save any message as .eml. From the command line, formail (from procmail) splits an mbox into separate files:

formail -s formail -I "From " < part-01.mbox > msg.$FILENAME
# or, per message index:
csplit -z -f msg- part-01.mbox '/^From /' '{*}'

4. Verify authenticity with DKIM

This is the part that answers "how do I know it is real". Many messages carry a DKIM-Signature: a cryptographic signature made by the sending domain's mail server, covering specified headers and a hash of the body.

A valid DKIM signature proves the message passed through the named domain's mail server and was not altered in transit after signing. It does not prove a specific person typed it, and it does not prove the content is true. It proves origin and integrity.

Check it

# 1. save the message
formail -1 < part-01.mbox > message.eml

# 2. verify with python-dkim
python3 -m pip install dkimpy
python3 -c "
import dkim
raw = open('message.eml','rb').read()
print('valid:', dkim.verify(raw))
"

# 3. or with opendkim
opendkim-testmsg < message.eml

# 4. or with mailauth (node)
npx mailauth report < message.eml

Check the signing key still exists

The signature names a selector. The public key lives in DNS at <selector>._domainkey.<domain>:

dig +short selector1._domainkey.afd.de TXT
Important caveat. Keys get rotated and DNS records get removed. If the selector no longer resolves, you cannot re-verify the signature today — but the signature is still evidence of what was claimed at send time. Say so honestly rather than implying a failed check means a forgery.

5. Read the delivery chain

Received headers record every server that handled the message. Read them bottom-up: the lowest is the first server that saw it, the top one is the last.

Received: from mail.afd.de (mail.afd.de [1.2.3.4])
        by mx.example.de with ESMTPS id abc123
        for <[email protected]>; Mon, 3 Jun 2024 10:22:11 +0200

What to look for:

Authentication-Results, added by the receiving server, records the SPF, DKIM and DMARC verdicts at delivery time. That is stronger evidence than a re-check today, because it cannot have been affected by later key rotation.

6. Cross-check the content

The strongest verification is agreement between independent files:

What this archive cannot prove

Being explicit about the limits is part of being trustworthy:

A defensible sentence

When citing this material, something like this does the work:

The document is an email dated 3 June 2024, sent from [email protected] to
[email protected], with a valid DKIM signature for the afd.de domain and a
Received chain consistent with delivery through the party's mail server. Its
Message-ID places it in the same thread as [other message], which corroborates
the sequence of events. The attached invoice carries metadata consistent with
the claimed date, and its reference number appears in a second, independently
obtained email.

That is verification. "We obtained documents" is not.

Tools used above

toolpurpose
dkimpy / opendkim / mailauthverify DKIM signatures
digcheck whether the signing DNS record still exists
formail / csplitsplit an mbox into individual messages
notmuch / muttsearch and read a mailbox
pdfinfo / exiftoolPDF and image metadata
unzip + xmllintOffice document metadata (docProps/core.xml)

← Browse the archive  ·  How records were assessed →