MBOX — Thread Plus Its Bounce, With mboxrd Escaping
Three messages in one mailbox: an original whose body contains both a bare "From " line and an already-escaped ">From " line, the reply that threads to it, and the multipart/report bounce that reply triggered. mboxrd escaping is what makes the round trip lossless.
From maya@brightside.example Wed Feb 18 09:00:00 2026
From: Maya Chen <maya@brightside.example>
To: Sam Rivera <sam@meridiansupply.example>
Subject: Standing order for Q1 (SAMPLE)
Date: Wed, 18 Feb 2026 09:00:00 -0800
Message-ID: <p7-mbox-root@brightside.example>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sam,
The two lines below exercise mailbox escaping:
>From here on the quoted price is fixed.
>>From a forwarded copy, already escaped once.
Maya
From sam@meridiansupply.example Wed Feb 18 09:30:00 2026
From: Sam Rivera <sam@meridiansupply.example>
To: Maya Chen <maya@brightside.example>
Subject: Re: Standing order for Q1 (SAMPLE)
Date: Wed, 18 Feb 2026 09:30:00 -0800
Message-ID: <p7-mbox-reply@brightside.example>
In-Reply-To: <p7-mbox-root@brightside.example>
References: <p7-mbox-root@brightside.example>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Confirmed. Sending the invoice to dana@nonexistent.example as requested.
From MAILER-DAEMON@mx1.meridiansupply.example Wed Feb 18 09:31:00 2026
From: Mail Delivery Subsystem <MAILER-DAEMON@mx1.meridiansupply.example>
To: Sam Rivera <sam@meridiansupply.example>
Subject: Delivery Status Notification (failure) SAMPLE
Date: Wed, 18 Feb 2026 09:31:00 -0800
Message-ID: <p7-mbox-dsn@mx1.meridiansupply.example>
In-Reply-To: <p7-mbox-reply@brightside.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status; boundary="=_p7_mbox_dsn"
--=_p7_mbox_dsn
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Delivery to dana@nonexistent.example failed permanently.
--=_p7_mbox_dsn
Content-Type: message/delivery-statusSpecifications
- Wave
- p7
- Seed
- 20260807
- Messages
- 3
- Escaping
- mboxrd
- Escaped Body Lines
- 2
- Contains Multipart Report
- true
- Thread Depth
- 2
- Line Endings
- LF (Unix mailbox storage)
Testing contract
Expected to pass- Scenario
- Split a mailbox whose message bodies contain lines that look like mbox separators, then thread the reply and attach its bounce.
- Expected result
- Exactly three messages are found — not five — the two escaped body lines unescape to "From " and ">From ", and the DSN is linked to the reply by In-Reply-To.
What is a .mbox file?
An MBOX file is a mailbox that stores many email messages concatenated into one plain-text file, each message preceded by a 'From ' separator line. It is the classic Unix mailbox format used by many mail clients for export and archival.
How to use this file
Use an example MBOX to test mailbox splitting, message boundary detection, thread reconstruction, and import into a mail client or parser.
How to use this file for testing
“MBOX — Thread Plus Its Bounce, With mboxrd Escaping” is a deterministic Novus Examples fixture for Email parsing, Error handling, Conversion testing. Standards-compliant RFC 822 messages — plain, multipart text+HTML, and with an attachment — plus an MBOX mailbox, for testing header parsing, MIME decoding, attachment extraction, and mailbox splitting.
Documented properties for this file: seed 20260807 · 3 messages · LF (Unix mailbox storage). Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Email fixtures use fixed dates, message IDs, and MIME boundaries so runs are reproducible, and every address is fictional. Test header parsing, MIME decoding, attachment extraction, and EML/MBOX conversion against the documented structure.
Code examples
import mailbox
for msg in mailbox.mbox("p7-thread-with-bounce.mbox"):
print(msg["subject"])Related files
- emlEML — 1,024-Octet Header Line With No Fold PointA single header whose value is one 1,001-character token with no whitespace, making the line 1,024 octets — past the 998-octet limit RFC 5322 sets and impossible to fold. Fixed-size line buffers truncate here, and the truncation is silent.

- emlEML — Attachment With No Filename At AllAn attachment with a bare Content-Disposition: attachment and no name in either header. A client has to invent a filename, and the extension it invents decides whether the saved file opens as a spreadsheet or as unknown binary.

- emlEML — DSN Missing Its message/delivery-status Part (Deliberately Incomplete)A multipart/report that advertises report-type=delivery-status but is deliberately incomplete: the required message/delivery-status part is missing, leaving only human prose and the returned headers. Real MTAs emit this, and a parser must not assume the part exists.

- emlEML — Encoded-Word With an Unregistered CharsetAn encoded-word naming a charset no registry knows. The payload happens to be UTF-8, so a decoder has a choice: fall back and show readable text, or leave the raw encoded-word visible. What it must not do is raise and drop the whole header.

- emlEML — multipart/alternative With an Empty text/plain PartA zero-length text/plain alternative next to a real HTML part — the shape produced by senders that add a plain part only to satisfy spam filters. Anything preferring plain text renders a blank message unless it falls back when the chosen part is empty.

- emlEML — multipart/related With a Dangling cid: ReferenceThe HTML body references a Content-ID that no part in the message provides — the everyday result of a forward that dropped an attachment. A renderer should show the alt text and carry on, not emit a broken external request or fail the whole message.

Generated by generation/email_p7.py. Free for any use, no attribution required — license.