Skip to main content
ET

Email Template Builder

Stack headings, paragraphs, buttons, images, dividers and spacers into a ready-to-send HTML email — no drag-and-drop plugin required.

Did you like the tool? Thanks!
Share:

Stack blocks to build a simple HTML email, then copy or download the source. Everything runs in your browser — nothing is uploaded.

Add a block above to start building your email.

How to Use Email Template Builder

Click the add-block buttons to build your email top to bottom: Heading, Paragraph, Button, Image, Divider or Spacer. Reorder blocks with the up/down arrows, edit each block's fields inline, and delete anything you don't need. The live preview renders the actual email-safe HTML as you go. When it looks right, copy the HTML source or download it as a ready-to-use .html file.

About Email Template Builder

Marketing and transactional emails are built differently from ordinary web pages, and that difference catches a lot of people off guard the first time they try to hand-code one. A regular webpage can use CSS classes, flexbox, external stylesheets, and whatever layout technique the framework of the day favors. HTML email cannot rely on any of that, because the rendering engines inside Gmail, Outlook, Apple Mail and dozens of other clients are wildly inconsistent, several of them (Outlook desktop especially, which still uses Microsoft Word's rendering engine for HTML email) don't support modern CSS at all, and most clients strip `<style>` blocks and external stylesheets outright as a spam and tracking countermeasure. The one layout approach that has reliably worked across nearly every client for over two decades is a `<table>`-based structure with every style declared inline, directly on each element — which is exactly what this tool generates. The block-based approach mirrors how most email marketing platforms — Mailchimp, Klaviyo, and similar tools — let non-developers assemble a template: pick a block type, fill in its fields, reorder as needed. Six block types cover the overwhelming majority of simple email layouts. A Heading (rendered as an inline-styled `<h1>` or `<h2>`) establishes a title or section break. A Paragraph carries body copy. A Button renders as an `<a>` tag styled to look like a button — a real button element doesn't exist in email-safe HTML, so a heavily-styled link is the standard technique, and it's also the only one guaranteed to remain clickable across clients that strip form elements entirely. An Image embeds a `<img>` pointing at a URL you supply; this tool deliberately does not host or upload images itself, since a functioning email needs its images hosted somewhere with a stable, long-lived URL, which is a hosting decision outside the scope of a browser-only tool. A Divider inserts a thin horizontal rule to separate sections visually. A Spacer inserts an empty, fixed-height row — the standard trick for controlling vertical whitespace in email, since `margin` and `padding` values are inconsistently honored by different clients but a table row's `height` almost always is. Reordering uses simple up/down buttons rather than drag-and-drop, deliberately: this project does not add npm dependencies, and every popular drag-and-drop library is a dependency. Swapping array indices on a button click accomplishes the same reordering with zero additional code weight and full keyboard accessibility, which drag-and-drop interfaces often lack. The outer content width is fixed at 600 pixels and is not user-editable. That number isn't arbitrary — 600px has been the de facto standard maximum width for HTML email for well over a decade, chosen because it comfortably fits inside the preview panes of virtually every desktop email client without a horizontal scrollbar, while still rendering reasonably on the narrower viewports of mobile mail apps. Templates built wider than roughly 600–650px routinely get clipped, horizontally scrolled, or auto-shrunk in ways that break careful layouts, so keeping the builder locked to a known-safe width removes an entire category of subtle rendering bugs before they can happen.

Details & Tips

Every user-typed text field — heading text, paragraph text, button label, and image alt text — is HTML-escaped before being placed into the generated markup, so typing a stray `<`, `&`, or `"` character cannot break the table structure or inject unintended markup into the exported HTML. URLs (the button's link and the image's src) go through the same escaping function, which correctly handles a `"` character appearing inside a URL without corrupting the surrounding `href="..."` or `src="..."` attribute — but note that URLs are not otherwise validated, so double-check a pasted link resolves where you expect before sending. The background color picker sets the color of the full-width outer table that surrounds the centered 600px content column — this is the color visible in the "letterboxing" area on wide screens, a detail many hand-built email templates get wrong by leaving it plain white or transparent. "Copy HTML" places the generated markup on your clipboard as plain text, ready to paste into your email service provider's "custom HTML" or "code" editor (Mailchimp, Klaviyo, Campaign Monitor, SendGrid and most others accept raw HTML this way). "Download HTML" instead saves the same markup as a standalone `email-template.html` file via a `Blob` and a temporary download link — useful for keeping a version-controlled copy, attaching to a ticket, or opening directly in a browser to preview exactly how the raw file renders outside this tool. When no blocks have been added yet, the preview area shows a friendly placeholder message rather than an empty or malformed table, so it's always clear the canvas is simply waiting for its first block rather than broken. A practical workflow tip: build and test emails block by block, checking the live preview after each addition, rather than adding everything at once — because email rendering varies enough between clients that it's worth periodically pasting the exported HTML into an actual send-test (many email service providers offer a free "send test" feature) before a real campaign goes out to a full list.

Frequently Asked Questions

What block types can I add?
Heading (H1 or H2), Paragraph, Button, Image, Divider, and Spacer. Add as many of each as you like, in any order, using the buttons above the block list.
How do I reorder blocks?
Each block has an up and down arrow button that swaps it with the block directly above or below. There is no drag-and-drop, which keeps the tool lightweight and fully keyboard-accessible.
Why is the content width fixed at 600 pixels?
600px is the long-standing standard maximum width for HTML email — it fits inside virtually every desktop client's preview pane without a horizontal scrollbar and still renders sensibly on mobile. Wider layouts frequently get clipped or auto-shrunk in unpredictable ways.
Why can't I upload images directly?
A real email needs its images hosted at a stable, publicly reachable URL to display correctly for recipients — that is a hosting decision outside what a browser-only tool can provide. Paste a URL to an image you've already uploaded elsewhere (your website, an image host, or your email platform's asset library).
Is the exported HTML safe to paste into Mailchimp, Klaviyo, or similar tools?
Yes. The output is a self-contained table-based structure with inline styles only and no external stylesheet, script tags, or CSS classes — the format nearly every email service provider's "custom HTML" editor expects.
What is the difference between "Copy HTML" and "Download HTML"?
"Copy HTML" puts the markup on your clipboard for pasting into another tool. "Download HTML" saves it as a standalone .html file you can keep, share, or open directly in a browser to preview.
Why does the Button block use a link instead of a real button element?
HTML `<button>` elements are unreliable in email — many clients strip form controls entirely. A heavily-styled `<a>` tag is the standard, most compatible way to create something that looks and behaves like a button in email.
What does the Spacer block do?
It inserts an empty table row of a fixed pixel height you choose, used to add vertical whitespace. Table row height renders far more consistently across email clients than CSS margin or padding does.
Is my content sent to a server?
No. Every block, the live preview, and the final HTML are generated entirely in your browser with JavaScript. Nothing you type is uploaded or transmitted.
What happens if I type a "<" or "&" in a heading or paragraph?
It is automatically HTML-escaped before being placed in the generated markup, so it displays as the literal character in the finished email rather than being interpreted as HTML or breaking the layout.
Can I preview how the email looks before sending it?
The live preview approximates the rendered output, but because email clients vary, it's good practice to also use your email service provider's "send test" feature with the exported HTML before sending to a real list.
What happens if I delete every block?
The preview shows a placeholder message inviting you to add a block, rather than an empty or broken table — you can start again from a clean slate at any time.

Also Available As

email template builder, html email generator, email template editor, newsletter template builder, responsive email html generator, email marketing template maker

Found a Problem?

Let us know if something with Email Template Builder isn't working as expected.

Thanks — we'll take a look.