Podesta Email Corpus Analysis

Podesta Email Corpus Analysis

Methodology: the full wikileaks-full.mbox parsed with Python stdlib mailbox / email in a single pass, normalized to JSONL, attachments content-addressed to disk. All counts below come from the parsed JSONL, not the raw mbox. Pass generated on 2026-04-13.


1. Corpus overviewlink

Messages parsed 50,887
Date range 2000-06-29 — 2016-03-21
Unique senders 3,844
Attachments (total instances) 14,119
Attachments (unique content-hashed blobs) 10,276
Attachment storage (dedup'd) 2.7 GB
Messages with In-Reply-To 20,606 (40.5%)
Messages with References 21,036 (41.3%)
Synthetic Message-IDs 1 (0.00%)
Duplicate Message-IDs 42 (0.08%)
DSNs / bounces 426
Malformed Date headers 0

2. Provenance & source reconciliationlink

The kanban card originally called for a three-way overlap matrix across three WikiLeaks mirror snapshots (wikileaks-full, archive-small, archive-zip). Phase-1 exploration showed this work would produce no signal:

  • archive-small is a truncated byte-prefix of wikileaks-full. Every message in archive-small is byte-identical to the corresponding prefix of the canonical mbox. No reconciliation needed.
  • archive-zip is an HTML export, not a mail store. The HTML pages carry no Message-ID headers, and messages larger than ~10 KB have their bodies omitted from the export. There is no usable join key with the mbox corpus.

This report therefore treats wikileaks-full (50,887 messages, 4.67 GB on disk) as the canonical source and ignores the other two snapshots. The decision was approved before parsing began.


3. Message-ID healthlink

Condition Count % of corpus
Message-ID header present 50,886 100.00%
Synthetic Message-ID generated 1 0.00%
Duplicate Message-ID (first-wins kept) 42 0.08%

Synthetic IDs are deterministic: sha256("{from}|{date}|{subject}|{body[:200]}")[:16] + "@synthetic.pmail". Replaying the parse on identical input produces identical synthetic IDs, so the DB loader (#621) can treat synthetic IDs as stable primary keys.

Duplicate-ID handling in #621: first occurrence wins; subsequent occurrences are either dropped or stored under a suffix depending on body hash equality.


4. Date distributionlink

By yearlink

Year Messages
2000 1
2004 1
2005 1
2006 7
2007 350
2008 6,007
2009 1,147
2010 1,171
2011 1,027
2012 1,288
2013 1,286
2014 7,263
2015 24,672
2016 6,665

By monthlink

Month Messages
2000-06 1
2004-06 1
2005-06 1
2006-02 2
2006-10 4
2006-11 1
2007-05 1
2007-06 8
2007-07 1
2007-09 50
2007-10 19
2007-11 93
2007-12 178
2008-01 243
2008-02 316
2008-03 117
2008-04 158
2008-05 296
2008-06 455
2008-07 448
2008-08 494
2008-09 546
2008-10 1,258
2008-11 1,281
2008-12 395
2009-01 245
2009-02 5
2009-03 9
2009-05 112
2009-06 120
2009-07 99
2009-08 42
2009-09 138
2009-10 141
2009-11 134
2009-12 102
2010-01 126
2010-02 111
2010-03 124
2010-04 75
2010-05 82
2010-06 90
2010-07 57
2010-08 90
2010-09 108
2010-10 180
2010-11 71
2010-12 57
2011-01 66
2011-02 57
2011-03 74
2011-04 65
2011-05 73
2011-06 57
2011-07 51
2011-08 36
2011-09 19
2011-10 18
2011-11 275
2011-12 236
2012-01 165
2012-02 62
2012-03 46
2012-04 43
2012-05 28
2012-06 17
2012-07 94
2012-08 181
2012-09 198
2012-10 209
2012-11 121
2012-12 124
2013-01 113
2013-02 115
2013-03 128
2013-04 109
2013-05 128
2013-06 118
2013-07 124
2013-08 119
2013-09 128
2013-10 70
2013-11 39
2013-12 95
2014-01 391
2014-02 381
2014-03 350
2014-04 405
2014-05 386
2014-06 338
2014-07 535
2014-08 910
2014-09 865
2014-10 1,010
2014-11 827
2014-12 865
2015-01 1,041
2015-02 1,500
2015-03 2,163
2015-04 2,296
2015-05 1,979
2015-06 2,165
2015-07 2,336
2015-08 2,127
2015-09 2,271
2015-10 2,484
2015-11 2,045
2015-12 2,265
2016-01 2,549
2016-02 2,432
2016-03 1,684

5. Top senders (top 50)link

# Sender Messages
1 john.podesta@gmail.com 6,553
2 mfisher@hillaryclinton.com 1,329
3 cheryl.mills@gmail.com 735
4 re47@hillaryclinton.com 705
5 info@barackobama.com 627
6 slatham@hillaryclinton.com 534
7 eryn.sepp@gmail.com 517
8 jpalmieri@hillaryclinton.com 513
9 hms@sandlerfoundation.org 438
10 burns.strider@americanbridge.org 419
11 podesta@podesta.com 417
12 dschwerin@hillaryclinton.com 408
13 kofferdahl@hillaryclinton.com 382
14 funk@americansunitedforchange.org 329
15 ntanden@gmail.com 326
16 robbymook2015@gmail.com 325
17 ha16@hillaryclinton.com 298
18 sara.latham@ptt.gov 292
19 feedback@lcv.org 279
20 admin@endcitizensunited.org 278
21 jsullivan@hillaryclinton.com 277
22 podesta.mary@gmail.com 271
23 robbymook@gmail.com 261
24 jbenenson@bsgco.com 255
25 nbudzinski@hillaryclinton.com 244
26 messenger@truthout.org 236
27 jennifer.m.palmieri@gmail.com 233
28 gpodesta@gmail.com 223
29 arenteria@hillaryclinton.com 220
30 info@votevets.org 216
31 clu@barackobama.com 215
32 tina@presidentclinton.com 214
33 nmerrill@hrcoffice.com 209
34 cle@americanbar.org 209
35 mpbonner@bonnergrp.com 208
36 jake.sullivan@gmail.com 205
37 mrooney@hillaryclinton.com 200
38 meganrouse@gmail.com 189
39 aelrod@hillaryclinton.com 188
40 tom@zzranch.com 188
41 info@seanmaloney.com 184
42 brentbbi@webtv.net 174
43 mpodesta@gmail.com 169
44 footlocker@e.footlocker.com 165
45 kschake@hillaryclinton.com 164
46 creamer2@aol.com 164
47 gruncom@aol.com 164
48 info@kirkpatrickforarizona.com 164
49 tcarrk@hillaryclinton.com 160
50 mond1967@zahav.net.il 159

Corpus contains 3,844 unique sender addresses.


6. MIME structurelink

Top-level Content-Type of each message (what the outer envelope advertises):

Top-level content type Count
multipart/alternative 34,629
text/plain 6,356
multipart/mixed 5,960
multipart/related 2,531
text/html 1,023
multipart/report 376
text/calendar 8
image/jpeg 1
application/vnd.openxmlformats-officedocument.wordprocessingml.document 1
multipart/signed 1
application/pdf 1

Content-Transfer-Encoding distribution across all MIME parts (not just top-level):

Content-Transfer-Encoding Parts
quoted-printable 64,844
base64 20,380
7bit 11,125
8bit 731
binary 13

7. Attachmentslink

Totals: 14,119 attachment instances, content-dedup'd to 10,276 unique blobs totaling 2.7 GB on disk.

By content type (top 20)link

Attachment content type Count
image/jpeg 4,171
application/vnd.openxmlformats-officedocument.wordprocessingml.document 2,540
image/png 1,925
application/pdf 1,734
application/msword 1,014
application/ics 701
image/gif 674
application/octet-stream 397
text/html 186
text/plain 129
text/calendar 97
application/vnd.ms-excel 96
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 73
image/bmp 52
application/ms-tnef 42
application/vnd.ms-powerpoint 40
image/jpg 40
application/vnd.openxmlformats-officedocument.presentationml.presentation 28
image/pjpeg 20
image/x-png 18

By filename extension (top 20)link

Extension Count
.jpg 4,136
.docx 2,573
.png 1,943
.pdf 1,898
.doc 1,082
.ics 800
.gif 674
.htm 118
.jpeg 114
.xls 102
.txt 86
.xlsx 77
.bmp 52
.dat 43
.ppt 39
.pptx 27
.vcf 23
.zip 23
.rtf 18
.emz 15

Largest attachments (top 15)link

Size Filename Type
22.3 MB Barbara Walters Carol Birthday Greeting.mov video/quicktime
20.8 MB Univision Hispanic Electorate Poll - Presentation 7.13.15 FINAL.pdf application/pdf
19.8 MB 2016ElectionPreviewEZ.pdf application/msword
18.2 MB Covers(A-M)_20150311.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
17.4 MB Covers(N-Z)_20150311.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
14.8 MB ClimateWorks Board orientation binder_2015.pdf application/pdf
13.9 MB 2012 Budget Meeting Documents 2.zip application/zip
13.9 MB 2012 Budget Meeting Documents 2.zip application/zip
13.9 MB 2012 Budget Meeting Documents 2.zip application/zip
12.1 MB 3rd Commission Meeting Agenda and Papers.pdf application/pdf
11.6 MB popup nola rough 4-24.mov video/quicktime
11.3 MB LYVNOIWIExperimentBriefing.pdf application/pdf
10.9 MB Theresa1.png image/png
10.8 MB REVISED HFA Presentation 12.17.15.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
10.5 MB B462E513-9DFC-4801-B7A7-18560D8EDBB8.png image/png

8. Threadinglink

Messages with In-Reply-To header 20,606 (40.5%)
Messages with References header 21,036 (41.3%)
Orphan replies (IRT → unknown parent) 5,714
Largest reference-chain thread (node count) 48

Threading derivation (root detection, union-find, canonical thread IDs) is deferred to #621. This report only profiles the raw coverage so the loader knows how many messages will need synthesized thread roots.


9. Character encodingslink

Charset Parts
utf-8 54,441
us-ascii 17,095
iso-8859-1 14,809
windows-1252 5,499
windows-1255 287
big5 136
windows-1256 111
iso-2022-jp 58
koi8-r 52
iso-8859-7 32
iso-8859-8-i 32
gb2312 26
iso-8859-15 24
iso-8859-2 23
windows-1250 20
euc-kr 20
ascii 12
cp1252 10
iso-8859-9 6
gbk 6

Non-UTF-8 charsets are decoded with errors='replace' during parse. The HTML sanitizer in #621 will re-normalize to UTF-8 on write.


10. Anomalieslink

Anomaly Count
Synthetic Message-ID needed 1
Duplicate Message-ID 42
Malformed Date header 0
DSN / bounce (by MIME type or subject) 426
Attachment decode failure 0

11. Readiness for ingestlink

Parser-emitted warnings the #621 DB loader must handle:

Warning tag Meaning Loader behavior
synthetic_id Original message had no Message-ID header Accept synthetic ID as primary key; flag on message row
malformed_date Date header present but unparseable Store date_raw; leave date_iso NULL; sort by byte_offset fallback
dsn_message MIME part message/delivery-status detected Flag as bounce; do not thread into user conversations
dsn_subject Subject matches bounce regex but no DSN MIME Soft-flag; still index
attachment_decode_failed Attachment payload could not be decoded Record metadata row with NULL sha256; skip blob write
attachment_write_failed Blob write to disk failed mid-pass Retry on next run (idempotent via content address)

The full JSONL (ingest/pmail/staged/wikileaks-full.jsonl) is the input to #621 — the loader reads one line at a time, hits the attachment blobs by sha256, and inserts into pmail.db per the schema already shipped in 9c66910.