Deniable
← Back to blog

Email and document parsing · 8 min read

Why EML Files Break Most Parsers (And How to Test Them Correctly)

Test EML parsers against headers, MIME boundaries, forwarded messages, character sets, attachments, and quoted-printable content with realistic synthetic email cases.

An email is a container, not just a message

EML combines headers, MIME boundaries, body alternatives, encodings, attachments, and thread relationships. A parser can extract visible text while still losing the sender identity, reply chain, or original character set that an application needs.

Clean one-part messages are a useful smoke test. They are not a regression suite.

The failure families worth testing

A durable EML set should make each boundary observable.

  • Folded, duplicated, missing, or unusually ordered headers.
  • Multipart/alternative bodies with different plain-text and HTML content.
  • Quoted-printable and base64 sections with accented characters.
  • Forwarded messages, nested messages, and incomplete References chains.
  • Attachments with unusual filenames, content types, or duplicate names.

Keep expected behaviour explicit

Document whether the parser should prefer plain text, preserve HTML, decode a specific charset, group a thread, or expose attachment metadata. A failing case is much easier to fix when the intended output is recorded beside the raw EML input.

Use synthetic EML without a real mailbox

Deniable EML cases are designed for support-ticket, email-client, and anti-spam workflows. They contain complete headers, message flow, and metadata while keeping real customer mail out of the test loop. Link the case ID to the parser result and add a regression assertion when a bug is fixed.

Continue exploring

Put the idea into a repeatable test.

See the related Deniable workflow or browse the catalogue when you are ready to inspect real prepared cases.

Explore EML parser testingBrowse datasets →