What a .eml file is
A .eml file is one email message stored exactly as it travelled: header lines, a blank line, then the body. The format is RFC 5322, the same text a mail server hands to another mail server. Thunderbird, Apple Mail, Windows Mail and most webmail exports all write it, which is why it is the closest thing email has to a universal single-message format.
Being text does not make it readable. Header values that contain non-ASCII characters are wrapped as
encoded-words, so a subject appears as =?UTF-8?B?UTMgcmV2aWV3?=. A long header is folded
across several lines. The body is usually multipart/mixed: a boundary string separates a
plain-text version, an HTML version and each attachment, and every attachment is base64. Opening the file
in Notepad shows you all of this raw — which is why people look for a viewer.
How to open a .eml file
- Open the message. Drop the .eml onto the box above, or click to browse. The file is read from your disk by the browser; no copy is sent anywhere.
- Read the decoded headers. Subject, sender, recipients and date appear first, with encoded-words decoded, so a subject written in Greek, Arabic or Japanese reads correctly instead of as symbols.
- Save the attachments. Each attachment is listed with its type and real size. Save decodes it from base64 and writes the original bytes, so a PDF arrives as a PDF.
- Read or export the message. The body appears underneath. Copy message puts it on your clipboard; Save as .txt writes the headers, attachment list and body to one plain-text file.
What comes out
- Decoded headers — subject, from, to, cc, bcc, reply-to, date and message id, with RFC 2047 encoded-words converted back to real characters.
- The message body, preferring the plain-text part and falling back to the HTML source.
- Every attachment, decoded from base64 or quoted-printable and saved at its true size, with inline images identified.
- The complete header block, unfolded and listed in the order it appeared — including the full Received chain, SPF and DKIM results.
Filenames written in the RFC 2231 extended form, filename*=UTF-8''Q3%20report.xlsx,
are decoded to the real name rather than shown as percent-escapes.
What is supported, and what is not
Both transfer encodings are decoded: base64 and quoted-printable, including quoted-printable soft line
breaks, where a trailing = joins two lines that are really one. Character sets are honoured
per part, from each part’s own charset parameter, so a Windows-1251 Cyrillic body and a
UTF-8 attachment name in the same message both come out right.
Nested multipart trees are walked to a depth of twelve. multipart/alternative inside
multipart/mixed is the normal shape of a message with both text and HTML plus attachments,
and deeper nesting occurs with forwarded mail.
.msg files are detected by their Compound File signature and sent to the right tool rather
than parsed as text. .pst and .mbox hold many messages rather than one and are
not read here. Encrypted S/MIME and PGP payloads are listed as attachments but not decrypted.
Why the message is never uploaded
The file is read from your disk by the browser and parsed there. No server takes part, so the message never leaves your device.
That matters for email more than for most formats. A saved message is real correspondence — a contract, a dispute, a client’s personal details — and the usual way to open one online is to hand it to a converter and hope. There is nothing to hope about here. The body is shown as text rather than rendered as HTML, so tracking pixels never load and links are never live.
What this tool does not do
This is a reader, not a mail client. Five boundaries:
- It does not send, reply to or forward.
- It does not verify DKIM or SPF. The results the receiving server recorded are shown in the headers, but nothing is re-checked.
- It does not decrypt. S/MIME and PGP parts appear as attachments.
- It does not open .pst, .ost or .mbox. Those hold whole mailboxes.
- It does not render HTML mail. HTML bodies are shown as source, deliberately.
Why people need to open a .eml file
- An exported message will not open — a webmail download lands as .eml and the operating system has nothing associated with it.
- Getting an attachment out without importing the message into a mail client.
- Checking a suspicious email — reading the Received chain and the real sender address without rendering the message or loading its images.
- Evidence and disclosure — the header block is the record, and it needs to be read exactly as written.
- Debugging delivery — reading SPF, DKIM and DMARC results on a message that went to spam.
.eml compared with .msg and .mbox
A .eml is one message as plain text, written by almost every mail client. A .msg is one message inside a binary Compound File container, written by Outlook for Windows. A .mbox is many messages concatenated into one file, used by Thunderbird and Google Takeout.
The quick test: open the file in a text editor. Readable header lines mean .eml and it belongs here.
Binary noise means .msg — use the MSG viewer. Repeated
From lines throughout mean .mbox, which holds a whole mailbox.
Once an attachment is saved, open it with the DOCX text extractor, the Excel data extractor or the PDF text extractor. To pull every address out of a body you have copied, use the email extractor.
For a line-by-line explanation of what each header field means, read how to read email headers. To learn how to inspect email files on any system, read how to open an EML file.
.eml format standards and reading edge cases
A .eml file is an RFC 5322 internet message: header fields (From, To, Subject, Date,
Message-ID, MIME-Version, Content-Type) followed by a blank line and the body. Multipart
messages follow MIME (RFC 2046): the Content-Type header carries a boundary parameter; each
part begins with --boundary and the final boundary ends with
--boundary--.
Three edge cases: (a) a part with Content-Transfer-Encoding: base64 is decoded before
display — a 10 MB image stored as base64 expands to approximately 7.5 MB of binary data,
while the encoded text itself is about 13.3 MB; (b) each MIME part declares its own charset
in its Content-Type header (e.g., charset=windows-1252) — the extractor decodes
each part with its own declared encoding rather than assuming UTF-8 throughout; (c) a
message/rfc822 attachment — a forwarded message embedded as an attachment — is
parsed as a separate RFC 5322 message and shown as a nested block with its own headers and
body, rather than as an opaque file to save.
Frequently asked questions
How do I open a .eml file?
Drop it onto this page. The headers, message body and attachments are decoded in your browser, with no mail client and no account needed.
What is the difference between .eml and .msg?
A .eml is one message as plain RFC 5322 text and opens in any text editor. A .msg is one message inside a binary Compound File container written by Outlook for Windows. Same kind of content, completely different containers.
Why is my subject line full of question marks and equals signs?
Because it is an RFC 2047 encoded-word, the way email carries non-ASCII characters in headers. This tool decodes them, so the real subject is shown.
Is my email uploaded to a server?
No. The file is read from your disk and parsed inside your browser. Nothing is transmitted.
Can I get attachments out of a .eml file?
Yes. Each attachment is decoded from base64 and saved at its original size, identical to what the sender attached.
Why is the HTML shown as code instead of a formatted email?
Because rendering a stranger's email markup is how tracking pixels load and spoofed links get clicked. This is a reader, so the source is shown and nothing in the message runs.
Can I see who really sent a message?
The full header block is listed, including the Received chain and any SPF, DKIM and DMARC results the receiving server recorded. Those headers are what reveal a forged From line.
Does it open .mbox files?
No. An .mbox holds many messages concatenated together, not a single message.
Will non-English text display correctly?
Yes. Each MIME part declares its own character set and this tool honours that declaration, so Cyrillic, Greek, Arabic and CJK text decode correctly instead of appearing as mojibake.