MIME decoder
Runs in your browser
A message is not a block of text. It is a tree of parts, each one declaring its own type, its own character set and its own encoding, and a mail client only shows you the branch it picked. Paste a message and this lays the whole tree out.
It runs in this page, on your machine. Nothing you paste is uploaded. Attachments are listed and measured; they are never opened, never rendered, and there is nothing here to download them with.
Decode a message
The parts will appear here.
Reading the tree
Why a message has more than one copy of itself
multipart/alternative means the parts under it are the same content in different forms, and the client picks one — normally the last, which is the richest. That is why a marketing message contains a plain-text version you never see. It also means the two can disagree: nothing enforces that the text under an alternative says what the HTML beside it says.
multipart/mixed is the other common one, and it means the opposite: the parts under it are all of the message, one after another. Attachments live there. multipart/related holds a part and the images it refers to by cid:, which is how a message embeds a logo without fetching it.
Encoding is not encryption
Content-Transfer-Encoding exists because mail servers were once only safe for seven-bit ASCII. base64 rewrites arbitrary bytes into 64 safe characters at a cost of a third more size. quoted-printable leaves readable text alone and escapes the rest as =XX, which is why a quoted-printable part is half-legible and full of =3D.
Neither hides anything. Both are reversible by anyone, which is the whole point — they exist so a mail server does not corrupt the bytes, not so a reader cannot see them.
Charset is where mail goes wrong
A part declares the character set its bytes are in. Decode iso-8859-1 bytes as UTF-8 and you get replacement characters; decode UTF-8 as windows-1252 and you get the familiar mangled accents. This page decodes each part in the charset it declared, so if a part looks wrong here it probably looks wrong everywhere — the sender declared one thing and sent another.
Headers are a separate problem with a separate solution. They are ASCII, so anything else is wrapped as an RFC 2047 encoded-word — =?UTF-8?Q?…?= — and decoded back for display.
What this will not do
It will not give you the attachment. The bytes are decoded to measure them and then dropped, and there is no download control on this page. That is a deliberate limit: a tool that opens whatever a stranger attached is a different tool with a different risk, and this one is meant to be safe to point at a message you do not trust.
It also will not render the HTML. Reading a message’s structure should not fetch its images or run its scripts.
Malformed messages still decode
A truncated boundary, a part that never closes, a nesting depth no client would produce — these are the inputs people actually reach for a decoder with, so refusing them would fail the case the page exists for. The parser yields what it found and says what was wrong, rather than throwing away the whole message over one bad line.
It stops at twenty levels of nesting and five hundred parts. Past that a message is not malformed, it is hostile, and the cap turns it into a warning instead of a frozen tab.
One of the free email tools.