Sample MBOX and EML files
Invented mail for testing a viewer, converter or importer · 21 September 2026
A mail tool asks you to hand it your mailbox before you know whether it works. These two files exist so you do not have to: a small .mbox and a single .eml, written for this page, with the exact result a correct reader should show listed below — message by message, attachment by attachment. Open them in Mailward, or in anything else, and compare.
Nothing in them is real. No mailbox was exported to make them. The club and the people are made up, every address is on example.com, example.org or example.net — domains RFC 2606 reserves for documentation — and the attachments (a PNG, a one-page PDF, a CSV, a calendar invite, a text note) are generated byte for byte by the same script that writes the mail. Use the files freely — in test suites, bug reports, tutorials — without asking and without credit.
The mailbox: mailward-sample.mbox
mailward-sample.mbox — 9,537 bytes · 12 messages, 5 attachments · 5 Gmail labels
SHA-256 62369ae29c0b4f921a65329c95f0530b35a9f7c9d96ddb943184291a50a15035
Download · Open it in Mailward now (the file is fetched from this site and parsed in your browser tab)
A Google-Takeout-shaped mbox: each message starts with a From_ line and carries an X-Gmail-Labels header. It is 9,537 bytes of pure ASCII — every non-ASCII character travels as an encoded word, base64 or quoted-printable, the way real mail does. Line endings are LF except for message 8, which is CRLF throughout.
| # | Subject · sender | Date | Labels | Attachments | What it exercises |
|---|---|---|---|---|---|
| 1 | Welcome to the members list Robin Example <secretary@example.org> | 2026-09-01 08:05 UTC | Inbox | — | Plain 7-bit text, LF line endings — the baseline. |
| 2 | Club newsletter — September Example Rowing Club News <news@example.net> | 2026-09-02 06:30 UTC | Inbox, Newsletter | — | multipart/alternative with quoted-printable parts: soft line breaks and UTF-8 punctuation (—, –) must decode, and the text part is what search reads. |
| 3 | Receipt: boat storage fee Club Treasurer <treasurer@example.org> | 2026-09-03 09:15 UTC | Inbox, Receipts | receipt-stamp.png (234 B) | One base64 image attachment: the saved file must be byte-identical to the PNG this script generated. |
| 4 | Regatta entry: form and fee table Regatta Office <entries@example.org> | 2026-09-04 14:40 UTC | Inbox, Receipts | entry-form.pdf (692 B)fees-2026.csv (150 B) | Two attachments of different types (PDF and CSV) on one message; also published on its own as the sample .eml. |
| 5 | 練習スケジュールのお知らせ 練習係(サンプル) <practice@example.org> | 2026-09-05 01:00 UTC | Inbox, 練習 | — | Japanese: RFC 2047 encoded-word subject and sender name, base64 UTF-8 body, and a non-ASCII Gmail label written as an encoded word. |
| 6 | Directions for Saturday Robin Example <secretary@example.org> | 2026-09-06 10:20 UTC | Inbox | — | mboxrd escaping: the body line "From the boathouse…" is stored as ">From the boathouse…" and must be shown without the ">". |
| 7 | Gate code Boathouse Manager <boathouse@example.org> | 2026-09-07 16:45 UTC | Inbox | — | An unescaped body line that starts with "From " (writers that never escape produce these). It is not a separator — it has no date — so the message must not be cut in two. |
| 8 | Re: Saturday practice Casey Sample <casey@example.com> | 2026-09-08 07:10 UTC | Sent | — | CRLF line endings throughout, including the From_ separator line, inside an otherwise LF file. |
| 9 | Lost property: blue water bottle Boathouse Manager <boathouse@example.org> | — (not a date) | Inbox | — | A Date header that is not a date. The message must still be listed, with an empty date rather than an error or a wrong one. |
| 10 | Re: Regatta entry: form and fee table Casey Sample <casey@example.com> | 2026-09-11 18:30 UTC | Sent | — | A reply with Cc, In-Reply-To and References, and quoted text — headers that an EML export must carry through unchanged. |
| 11 | Café rota Zoë Sample <cafe@example.org> | 2026-09-12 12:00 UTC | Inbox | — | ISO-8859-1: a Q-encoded sender name and a quoted-printable Latin-1 body (café, Zoë) — one byte per character, not UTF-8. |
| 12 | Saturday practice Coach Example <coach@example.org> | 2026-09-08 07:00 UTC | Inbox, 練習 | practice.ics (276 B)récapitulatif.txt (79 B) | A calendar invite (text/calendar) as an attachment, plus an attachment whose non-ASCII file name is given only in RFC 2231 form (filename*=UTF-8''…). |
What a correct reader shows
- 12 messages, not 13. Message 7 has a body line that begins with “From ” and is not escaped. A reader that splits on those five characters alone cuts it in two — Python 3.14's mailbox.mbox reports 13 for this file, and the extra “message” has no subject. A separator is a whole line: sender, then a date with seconds.
- 5 label folders rebuilt from X-Gmail-Labels: Inbox (10), Newsletter (1), Receipts (2), Sent (2), 練習 (2). A message with two labels is listed under both; the Japanese label arrives as an RFC 2047 encoded word and must be decoded, not shown as =?UTF-8?B?…?=.
- 5 attachments, each byte-identical to what was attached — sizes and checksums are in the table below. The last one is named only in RFC 2231 form (filename*=UTF-8''r%C3%A9capitulatif.txt) and must come out as récapitulatif.txt.
- Message 6 reads “From the boathouse, turn left…” — with no “>” in front. The file stores that line as >From the boathouse (mboxrd escaping) and a reader has to undo it.
- Message 9 is listed with an empty date. Its Date header says “Thursday morning”; the right answer is no date, not an error, not today's date, and not a dropped message.
- Message 11 shows “Zoë covers the café on Sunday”. The body is ISO-8859-1, one byte per character; read as UTF-8 it turns into replacement characters.
- Searching regatta finds messages 4 and 10; searching 艇庫 finds message 5, whose body is base64-encoded UTF-8.
| Attachment | In message | Bytes | SHA-256 |
|---|---|---|---|
| receipt-stamp.png | 3 | 234 | d01adc580b5d93b5a1f3e8797b9c638da0132fb411f221597cb8f8aba6e3ba15 |
| entry-form.pdf | 4 | 692 | f76a4b2cce98fd78c041210372733192f8373162521191cf4429d6b4402f4c27 |
| fees-2026.csv | 4 | 150 | 051c55fff6cf90e7b6ff71639a4994236c529563635dbb4facaf5b8795b7b50b |
| practice.ics | 12 | 276 | 8a52081429e34eba10816d4dd1b445e700b8d14caafeb2631e3d75408dee0e57 |
| récapitulatif.txt | 12 | 79 | 045be94ad09c0fcdc96e9de3faec972025e9cacc95e9ec0f54583f4f160aadcc |
The single message: mailward-sample.eml
mailward-sample.eml — 2,021 bytes · 1 message, 2 attachments
SHA-256 167b7473b9243be55456737acfb62389c482eb9e313f322f8cbb3be72ff8d9b8
Download · Open it in Mailward now (the file is fetched from this site and parsed in your browser tab)
Message 4 of the mailbox on its own, as a standalone RFC 5322 file with CRLF line endings and no From_ line: “Regatta entry: form and fee table”, from Regatta Office, with entry-form.pdf and fees-2026.csv. The attachments are the same bytes as in the mailbox, so their checksums match the table above.
What these files caught in our own reader
The first time Mailward's reader was run against this mailbox, eleven messages passed and one did not: practice.ics was saved as 264 bytes instead of 276. The MIME library underneath (postal-mime 2.7.5) treats calendar parts specially and rewrites them with LF line endings; the invite has 12 lines, so 12 carriage returns went missing. RFC 5545 requires CRLF, and an archive tool should hand back what was sent. The reader now returns the decoded part untouched, and the test that opens this file compares every attachment's checksum, so it stays that way. That is the argument for a public sample: the expectations were written down before the reader was run.
How the files are made and checked
One script writes the two files and the manifest this page is rendered from, deterministically — run it twice and the output is identical. A test then opens the files that are actually served here with the reader that actually runs in your browser and compares every subject, sender, date, label, attachment name, size and checksum against the manifest. If the two ever disagree the test suite fails and the change is not deployed. To check a download yourself:
shasum -a 256 mailward-sample.mbox
# 62369ae29c0b4f921a65329c95f0530b35a9f7c9d96ddb943184291a50a15035The mailbox is deliberately small. It tests correctness, not capacity; for what happens at several gigabytes, see reading a multi-gigabyte MBOX in the browser. For the formats themselves — mboxo, mboxrd, what an .eml is — see the email archive formats reference. There is no sample PST or OLM here yet: we have no way to write one that is both valid and free of anyone's real mail.