Your email never leaves this tab
Open EML, MSG and MBOX files without uploading them
Every other converter for these formats asks you to upload the file. That is a strange thing to be asked, because the reason you have a loose .eml or .msg on your desktop is almost always that it matters: a contract, a dispute, a claim, a message you were forwarded and are not sure about.
Nothing here is uploaded. The MIME parser, the Compound File reader, the mailbox indexer, the sanitiser and the PDF writer all run in your browser, on your device. The site has no server that accepts a file — its Content-Security-Policy sets connect-src ‘self’ and form-action ‘none’, so the browser itself refuses to send one. You can watch the network panel while you use it.
Open and read
Read a message without your mail client fetching anything on the sender's behalf.
- Open EML filesOpen .eml email files in your browser with remote content blocked, full header analysis, attachment extraction and SHA-256 hashes. Nothing is uploaded.
- Open Outlook MSG filesOpen .msg files from Outlook in your browser: body, HTML, recipients, dates, attachments and embedded messages, read from the real Compound File structure. Nothing is uploaded.
- Open and search MBOX mailboxesOpen large .mbox mailboxes in your browser: indexed locally, searchable by sender, subject and date, with per-message and batch export. Nothing is uploaded.
Convert
Turn a message into something the rest of the world can open.
- Convert EML to PDFConvert .eml email files to PDF without uploading them. Headers, body text, reply chains and a full attachment index with SHA-256 hashes, laid out on real pages — entirely in your browser.
- Convert MSG to PDFConvert Outlook .msg files to PDF with headers, body text and an attachment index with SHA-256 hashes. Runs entirely in your browser; nothing is uploaded.
- Convert MSG to EMLConvert Outlook .msg files to standard .eml messages that open in Thunderbird, Apple Mail and anything else. Attachments and inline images are preserved. Nothing is uploaded.
Investigate and extract
Get at what is inside a message, and at what the message is trying to do.
- Analyse email headersPaste or open an email and read its Received chain, SPF, DKIM and DMARC results, sender inconsistencies and external resources — analysed in your browser, never sent anywhere.
- Extract email attachmentsPull every attachment out of .eml, .msg and .mbox files, with SHA-256 hashes and a manifest, as a ZIP. Runs entirely in your browser; nothing is uploaded.
Why a browser-local tool is the right shape for this
A message file is self-contained. An .eml is the message exactly as it travelled; a .msg is a complete MAPI property bag; an .mbox is a folder of messages concatenated. None of them need a server to be read — the only reason converters use one is that it is easier to write the parser once in Python than to write it for the browser.
The cost of that convenience is paid by you. An uploaded mailbox sits on someone else’s disk, passes through their logs, and is subject to their retention policy and their jurisdiction. For a Google Takeout archive or a folder of legal correspondence that is a real exposure, and it is entirely avoidable.
What is genuinely implemented here
- MIME, from the bytes up: nested multiparts, alternative bodies, quoted-printable and base64, RFC 2047 encoded words including the split-character case, RFC 2231 continued parameters, RFC 6532 raw UTF-8 headers, inline CID images, calendar invitations, and the malformed structures that no two clients agree on.
- Compound File Binary Format, from the header down — FAT, mini-FAT, directory tree, mini-stream — with every chain walk bounded, because those bytes come from a file somebody sent you. On top of it, MAPI properties with the correct code page per property, recipient and attachment storages, embedded messages, and LZFu decompression of the compressed RTF body with HTML de-encapsulation.
- MBOX, indexed by streaming scan with the From-line escaping convention detected rather than assumed, and only the header block of each message read.
- Sanitisation in four independent layers, and an inventory of every remote resource a message would have fetched.
The tests run against a real corpus from Apache POI and CPython — including three fuzzer-minimised corrupt files — as well as generated fixtures for the hostile cases. How it works goes through the whole pipeline, and Formats and limits is the honest list of what is not supported.