Sample EML email files for testing parsers and clients, free and CC0

eml/plain-text.eml is the message every parser must read: one text/plain part, declared UTF-8 and quoted-printable, with every line ending in CR LF, so a parser that splits on \n alone leaves a stray \r on each line, and one that skips quoted-printable decoding shows an = wherever a line was wrapped.

eml/with-attachments.eml is multipart/mixed with a text part and two attachments, a PDF and a PNG, each base64-encoded, so a parser that takes the message for one body finds only the text, and one that skips base64 writes files that nothing opens. The attachments are the bytes of pdf/minimal.pdf, 586 bytes, and png/100x100.png, 1,387 bytes, which are published too, so an extractor can be checked by comparing what it writes with those two fixtures.

2 files. The same list as JSON: https://loremfile.dev/eml/index.json

EML files
FileSizePropertiesDescription
plain-text.eml 1.5 KB (1,531 bytes) A single text/plain message: the simplest thing a mail parser has to read, with a fixed date and Message-ID.
Snippets
<a href="https://loremfile.dev/eml/plain-text.eml">download</a>
curl -O https://loremfile.dev/eml/plain-text.eml
with-attachments.eml 4.1 KB (4,089 bytes) A message carrying two published fixtures as attachments, a PDF and a PNG, read from the bytes that were published.
Snippets
<a href="https://loremfile.dev/eml/with-attachments.eml">download</a>
curl -O https://loremfile.dev/eml/with-attachments.eml

Every EML file in one command, each checked against its hash: npx loremfile get --format eml, or loremfile get --format eml after pip install loremfile.

File names follow the naming grammar. Verify a download against sha256sums.txt.