Bulletproof Button Generator
Builds a button Outlook Classic draws as VML and the other 20 clients show as a styled link. Copy the code; nothing leaves your browser.
@emailens/engine 0.18.22 · data last changed 10 Nov 2026
Button box: 235 x 44px. This preview is the link every client except Outlook shows. The VML block in the code is what Outlook 2007-365 draws; its width is an estimate from your text, so check it in Outlook.
<!-- Bulletproof button: renders in Outlook (VML) + every other client (anchor) -->
<div>
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="https://example.com" style="height:44px;v-text-anchor:middle;width:235px;" arcsize="14%" strokecolor="#8a7544" fillcolor="#8a7544">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;">Confirm your email</center>
</v:roundrect>
<![endif]-->
<a href="https://example.com"
style="background-color:#8a7544;border:1px solid #8a7544;border-radius:6px;color:#ffffff;display:inline-block;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;line-height:44px;text-align:center;text-decoration:none;width:235px;-webkit-text-size-adjust:none;mso-hide:all;">Confirm your email</a>
</div>Edit the button and the checker opens it in a blank email. Or open the checker and paste your whole email there: five clients, no account.
No signup · Five clients free, Outlook Classic included · All 21 with an account
Which clients need an account
Gmail Android, Gmail iOS, Outlook 365, Outlook iOS, Outlook Android, Outlook for Mac, Apple Mail, Yahoo Mail Android, Yahoo Mail iOS, Samsung Mail, Thunderbird, HEY Mail, Proton Mail, AOL Mail, Fastmail, Superhuman open with a free account.
The checker needs a computer screen.
Why a normal CSS button breaks in Outlook
Desktop Outlook on Windows (versions 2007, 2010, 2013, 2016, 2019, 2021 and the classic Microsoft 365 client) renders email through Microsoft Word's HTML engine, not a browser. Word silently drops several properties a button depends on:
- border-radius is ignored. Rounded corners render as hard rectangles.
- padding on an inline <a> is ignored. The click target shrinks to the text bounds.
- background-image on the button is dropped. Gradient or image buttons lose their fill.
- display: inline-block is unreliable. Width and centering drift.
The generator solves this with a
<v:roundrect>
VML shape wrapped in an
<!--[if mso]-->
conditional comment. Outlook reads the VML; every other client reads the
styled <a> tag,
which is hidden from Outlook via
mso-hide:all. The
arcsize attribute
approximates your corner radius, and
w:anchorlock makes the
whole shape clickable.
Your next question
- Does border-radius work in Outlook Classic?
Works in 16 of 21 · partial in 4 · not supported in 1
- Does padding work in Outlook Classic?
Works in 20 of 21 · partial in 1
Other free tools: HTML Email Checker · CSS Support Lookup · CSS Inliner · Dark Mode Preview · Outlook Ghost Table Generator · Outlook VML Background Generator · Client Targeting Generator · Email Rendering Playground
Run this check on every email
The open-source CLI checks every template for VML and Outlook problems, free: npx @emailens/cli lint email.html
(CLI docs).
GitHub Action (Pro). Pro is $19 a month. The pre-send gate in CI, and the history behind every check. See the plans →
Questions
Why do email buttons break in Outlook?
Outlook 2007 through 2021 and classic Microsoft 365 desktop render HTML with the Microsoft Word engine, not a browser engine. Word ignores border-radius, padding on inline <a> tags, and background-image, so a CSS-only button collapses to plain underlined text. The fix is a VML <v:roundrect> shape that Word does understand.
What is a bulletproof button?
A bulletproof button is a clickable email button built to hold up in every major client, Outlook included. It pairs a VML roundrect (wrapped in an <!--[if mso]--> conditional comment for Outlook) with a styled <a> tag for all other clients. Each client reads only the version it supports, so the button looks the same everywhere, with square-ish corners in older Outlook.
Does this work in dark mode?
The button uses explicit background and text colors inline, which survive most dark-mode repainting. Gmail and Apple Mail may still adjust colors; set a high-contrast pair (for example white text on a saturated background) and test before sending.
Do I still need to test the button after generating it?
Yes. A generator writes correct markup, but inboxes differ by version and settings. The checker opens your button free in five clients, Outlook Classic included, or your whole email in all 21 with an account.