Skip to main content

Our email CSS engine is open source. Give it a star on GitHub 

Emailens

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

Start from:
Live preview

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.

Width mode
button.html
11 lines
<!-- 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>

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

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.