MIME Viewer
Paste a raw message and map its MIME parts, encodings and attachment structure.
What this tool does
MIME Viewer takes the source of a message and turns it into an inventory. It finds the boundary string declared in the Content-Type header, cuts the body along it, and starts again on each piece, so a multipart/mixed carrying a multipart/alternative comes back as a numbered set of rows — 1, 1.1, 1.1.2 — instead of a wall of base64. Every row gives one part's content type, charset, transfer encoding, disposition, filename or Content-ID, a raw size — the body alone for a leaf, the whole branch for a container — and, for leaf parts only, the size that body decodes to.
It also counts what is structurally wrong. A transfer encoding it cannot reverse, a text part carrying no charset (which silently makes it US-ASCII), base64 containing characters outside the alphabet, a multipart whose closing boundary never arrives because the message was cut short, a boundary declared but absent from the body, and a multipart message with no MIME-Version header are each written out as a warning beneath the table, with the tally joining the part and attachment counts in the summary line.
Every stage — the split on boundaries, the base64 and quoted-printable arithmetic, the byte counting — is JavaScript running on your own device, and the source you paste goes no further than the page. That is worth having for message source, because it reproduces the message whole: each address it was sent to, everything written in the body, and the name of anything attached. One consequence of working from pasted text rather than the original file is that sizes are measured from what your clipboard produced. If line endings were rewritten on the way across, or a body arrived 8-bit in a charset other than UTF-8, the byte figures move a little: a CRLF message pasted as LF loses a byte per line from every raw size, and from the decoded size of a quoted-printable part too, because its hard line breaks are decoded as they stand. The decoded size of a base64 part is the one figure that holds, since it is worked out from the alphabet characters alone and no amount of rewrapping changes them.
This is a map, not an unpacker. It does not write attachments out as files, it does not render the HTML part, and it neither verifies a signature nor decrypts anything — a multipart/signed or S/MIME message shows its parts while the payload stays opaque. Two settings, List each part's headers and Text preview per part, build a longer text report with per-part headers and decoded previews, but nothing on the page displays that report: the output pane is given to the parts table and Copy output copies the table, so as the tool stands today both controls change nothing you can see or take away. When you need the attachments themselves or the message as a human reads it, EML Viewer opens the .eml file directly.
How to use it
- Get the raw source. Most clients will hand it over: Gmail calls it Show original, Thunderbird View Source, Apple Mail Raw Source. An .eml file opened in a text editor is the same thing.
- Paste the whole message. Headers first, then a blank line, then the body. The Load sample button fills the box with a small multipart message if you want to see the layout first.
- Read the parts table. Each row is one part, and the dotted number says where it sits: 1.1.2 is the second child of the first child of the message.
- Check the count underneath. The summary reports parts, attachments and problems. A non-zero problem count means something in the structure does not hold together.
- Copy it out if you need it elsewhere. Copy output writes the table as CSV, one row per part, with any warnings appended after it, so it can go straight into a ticket or a reply to whoever sent the message.
Processing & privacy
Runs on your device. Your file is processed directly in this browser.
Common use cases
An attachment the recipient never saw
The table shows whether the part was in the message at all, what it was named, and how it was declared — attachment, inline, or nothing at all.
Text arriving as question marks or mojibake
A dash in the charset column of a text part means none was declared, so US-ASCII is assumed and accented characters turn into rubbish; that part is also counted as a problem.
A newsletter that renders as plain text
Look at the multipart/alternative branch: if the HTML part is missing, or sits before the plain-text one instead of after it, clients show the text.
A message that arrived cut short
A missing closing boundary is counted as a problem, which separates a truncated download from a message that was assembled wrongly in the first place.
Working out what a message weighs
The decoded column next to the raw column shows what base64 costs — roughly a third more bytes on the wire than the attachment itself.
Questions
Is my message uploaded?
I have an .eml file rather than pasted text — will that work?
Can I download an attachment from one of the parts?
Why are the sizes slightly different from the original file?
What do the two settings change?
Are attached or forwarded messages expanded too?
Can it tell me whether SPF or DKIM passed?
Related tools
- Email Header Analyzer — Trace delivery hops and read authentication results.
- MX Lookup — Check the mail exchange records for a domain.
- SPF Inspector — Parse an SPF record and count DNS lookups.
- DMARC Inspector — Read a DMARC policy and explain what it enforces.
- EML Viewer — Open an .eml message safely without a mail client.
- HTML Email Preview — Render an HTML email and check it at several widths.