HTML Email to Text

Paste an HTML email and get a clean plain-text version — tags removed, paragraphs and lists kept, links your way, optional 72-column wrap. Runs entirely in your browser.

Try:
Plain text

About this tool

Marketing and transactional emails are usually sent as HTML, but you often need the plain-text version — the text/plain alternative part that non-HTML clients show, the copy you paste into a ticket, or a clean read of a newsletter without the layout. This tool takes an HTML email body (the whole <html> document or just a <body> fragment) and returns readable plain text: tags removed, HTML entities like &amp; and &nbsp; decoded, and paragraphs, headings, and list items kept on their own lines.

The email-specific part is how it treats links and line width:

mailto: and tel: links are shown without the scheme (email us ([email protected])), and in-page #anchors, javascript:, and data: links are dropped as noise.

Worked example

Input (links = Footnotes):

<p>See the <a href="https://example.com/docs">docs</a> and
<a href="https://example.com/pricing">pricing</a>.</p>

Output:

See the docs[1] and pricing[2].

[1] https://example.com/docs
[2] https://example.com/pricing

Everything runs locally in your browser via WebAssembly — the email content is never uploaded, so it is safe to paste sensitive messages.

FAQ

What's the difference between this and a plain "HTML to text" stripper?

A bare stripper just removes tags and usually discards link URLs. This tool is aimed at emails: it keeps hyperlink destinations (inline or as numbered footnotes), can hard-wrap to the classic 72-column plain-text-email width, strips mailto:/tel: schemes, and drops in-page/javascript: links that add no value in plain text.

Should I paste the full HTML email or just the body?

Either works. You can paste the entire <html>…</html> source (for example the "view source" of a message) or just the inner <body> fragment. Surrounding <head>, <style>, and <script> content is ignored and does not appear in the output.

How are links rendered?

Choose one of three modes. Inline (the default) writes the link text followed by the URL in parentheses. Footnotes numbers each link (text[1]) and lists the URLs at the bottom. Text only keeps the visible text and drops the URL. When the visible text already is the URL or email address, it is not duplicated.

Why would I wrap at 72 columns?

Plain-text email convention wraps body lines at around 72 columns so the message reads well in terminals and quotes cleanly in replies. Set the wrap slider to 72 (or 78) to get that; set it to 0 to leave lines unwrapped for on-screen reading. Long words such as URLs are never broken, even if they exceed the wrap width.

Are images, tables, and buttons preserved?

Images are dropped (plain text has no images), and their alt text is not currently emitted. Tables and button-styled links are flattened to their text content — a button that links somewhere is treated like any other link. If you need the visual layout, keep the HTML version; this tool produces a text reading of the content.

Limits & notes

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool html-email-to-text "<h1>Weekly update</h1><p>Read the <a href="https://example.com/post">latest post</a>.</p>"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/html-email-to-text/?html=%3Ch1%3EWeekly%20update%3C%2Fh1%3E%3Cp%3ERead%20the%20%3Ca%20href%3D%22https%3A%2F%2Fexample.com%2Fpost%22%3Elatest%20post%3C%2Fa%3E.%3C%2Fp%3E&links=inline&wrap=72

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.