Bulletproof CTA Buttons in AcelleMail (Outlook-Safe)

AcelleMail's drag-and-drop Button widget generates Outlook-safe VML automatically. This guide covers when the widget is enough, when you need hand-coded VML, and the exact pattern for custom HTML templates.

What this is for

The cheapest way to ruin an email design is a CTA button that looks great in Apple Mail and Gmail — then renders as plain blue text in Outlook on Windows. This is not your fault — it's because Outlook 2007-2019 uses Microsoft Word as its HTML rendering engine, which ignores CSS border-radius, background-color on <a> tags, and most modern CSS.

The fix is VML (Vector Markup Language) — Microsoft's pre-HTML5 graphics language that Word respects. AcelleMail's drag-and-drop Button widget generates this automatically. If you hand-code custom HTML, you write it yourself.

Path 1 — Use the Button widget (recommended)

If you build emails in AcelleMail's drag-and-drop builder, you don't need to think about VML. The Button widget (one of the 12 Basic widgets) generates a bulletproof button — Outlook-safe HTML with VML fallback baked in.

How:

  1. Open your campaign at the Template step
  2. Click Open email builder
  3. From the right palette, drag Button onto the canvas
  4. Click the placed button → side panel opens
  5. Configure: text, URL, colour, corner radius, padding
  6. Save

The builder handles every Outlook quirk for you. For 95% of campaigns, this is the right answer.

See the first-campaign walkthrough for the Template-step screenshot showing the button widget in context.

Path 2 — Hand-coded VML (custom HTML templates)

If you import a custom HTML email (Template step → Change templateUse HTML editor → paste your own HTML), AcelleMail doesn't post-process the markup. You write the bulletproof code yourself.

The canonical bulletproof button pattern:

<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:w="urn:schemas-microsoft-com:office:word"
  href="https://yoursite.com/cta?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=primary_cta"
  style="height:44px; width:220px; v-text-anchor:middle;"
  arcsize="10%"
  fillcolor="#0066cc">
  <w:anchorlock/>
  <center style="color:#ffffff;font-family:Arial,sans-serif;font-size:16px;font-weight:bold;">
    Shop the sale
  </center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="https://yoursite.com/cta?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale_2026&utm_content=primary_cta"
   style="background-color:#0066cc;
          border-radius:4px;
          color:#ffffff;
          display:inline-block;
          font-family:Arial,sans-serif;
          font-size:16px;
          font-weight:bold;
          line-height:44px;
          padding:0 24px;
          text-decoration:none;">
  Shop the sale
</a>
<!--<![endif]-->

How it works:

  • <!--[if mso]>...<![endif]--> is a Microsoft Office (Word/Outlook) conditional comment. Code inside is ONLY parsed by Outlook desktop. Other clients ignore it.
  • <v:roundrect> is the VML shape Outlook respects — a rounded rectangle with fillcolor and arcsize.
  • <!--[if !mso]><!-->...<!--<![endif]--> is the inverse — code visible to every client EXCEPT Outlook desktop.
  • The plain <a> inside the second block uses normal CSS that Apple Mail / Gmail / Outlook web understand.

End result: Outlook sees the VML; every other client sees the CSS <a>. Same visual outcome.

Key VML attributes — what each does

Attribute Effect Typical value
href Click destination URL (include UTMs!) Full URL with query string
style="height:44px" Button height in pixels 40-48px (tappable on mobile)
style="width:220px" Button width Match your CSS <a> padding visually
arcsize Corner radius as % of height 10% ≈ 4px radius; 50% = pill shape
fillcolor Background colour Match your CSS background-color
v-text-anchor:middle Vertical centre text Always set
<w:anchorlock/> Make the entire box clickable Always include

Match the CSS and VML values

Both blocks render in different clients but should look IDENTICAL. Match these pairs:

CSS (<a>) VML (<v:roundrect>) Why
background-color: #0066cc fillcolor="#0066cc" Same button color
border-radius: 4px arcsize="10%" (for 40px-tall button) 10% of 40px = 4px
line-height: 44px style="height:44px" Same height
padding: 0 24px style="width:220px" (≈ text width + 48px padding) Visual width match
font-family: Arial... style="font-family:Arial..." (inside <center>) Same font
color: #ffffff style="color:#ffffff" (inside <center>) Same text color

If the two blocks disagree visually, your design feels "off" in Outlook only — a hard bug to spot.

When modern Outlook handles border-radius natively

Outlook for Mac (any version) and Outlook for Windows "New Outlook" (2022+) DO support modern CSS including border-radius. They render the <a> correctly without VML.

Distribution of Outlook versions (rough):

Version % of Outlook opens Renders VML Renders modern CSS
Outlook 2007-2019 desktop ~30-40% ✅ Yes ❌ No
Outlook 2021 desktop ~10% ✅ Yes Partial
"New Outlook" desktop (2022+) ~10% Ignored ✅ Yes
Outlook for Mac ~5% Ignored ✅ Yes
Outlook web ~30-40% Ignored ✅ Yes

The 30-40% on legacy desktop is the reason VML still matters. Audiences shrink as Microsoft migrates users, but until that's <5%, write the VML fallback.

AcelleMail-specific gotcha — preserve raw HTML

If you paste bulletproof HTML into AcelleMail's HTML editor, AcelleMail's compile pipeline shouldn't touch your VML — but always test. Send yourself a test campaign and view in real Outlook (or use a multi-client previewer like Litmus).

The places where AcelleMail's pipeline might interfere:

Pipeline stage Could break Check
Spintax processing `{... ...}` patterns inside CSS
Click-tracking wrap Replaces href with a redirect URL UTMs should pass through; verify
Inline-style copying Sometimes strips Outlook-specific attributes Test in actual Outlook

If something breaks, file a bug. The drag-and-drop Button widget is the safer path until then.

Save as a reusable template block

The bulletproof pattern is verbose. Save it once + reuse forever:

  1. Build one email with the bulletproof button (using the canonical pattern above)
  2. Templates → + Create template → save this email as a reusable template
  3. Future campaigns: pick the template → swap out the href + text → save
  4. Or: save just the button HTML block separately (in your team wiki) for paste-and-replace into custom HTML emails

After one round of setup, every future button reuses the proven code.

Common issues

What you see What to do
Button looks correct in Apple Mail, blue underlined text in Outlook Outlook is ignoring your CSS. Add the VML fallback (or switch to the Button widget).
Button text is centered horizontally but stuck at top in Outlook Missing v-text-anchor:middle. Add it.
Button "outline" shows in Outlook even though you set border: none Outlook adds default border to <a> tags. Use the VML <v:roundrect> path — it has no inherent border.
Modern "New Outlook" shows the button twice (once VML, once CSS) Your conditional comments are malformed. <!--[if mso]> must wrap the VML; <!--[if !mso]><!--> must wrap the CSS.
Button width different in Outlook vs Gmail VML width is fixed pixels; CSS <a> width is content + padding. Match by setting VML width = (CSS text width) + (CSS left+right padding).
Button text wraps in Outlook but not Gmail Outlook wraps if text + padding exceeds VML width. Increase the VML width value.

What NOT to do

  • Don't put your CTA in a background image. Outlook ignores background images, AND image-blocking by default in some clients means subscribers see nothing.
  • Don't use a button image (PNG/JPG button with the text rendered as graphics). Image-blocking shows alt-text, font scaling won't work, and accessibility is worse.
  • Don't skip the VML for B2B audiences. Outlook desktop is dominant in enterprise. Skipping the fallback breaks 40%+ of business audiences.
  • Don't test in just one client. Send a test, open in real Apple Mail, real Gmail, real Outlook desktop, real Outlook web. Catching button rendering issues at design time costs minutes; catching after launch costs the campaign.

Related articles

11 comentarios

5 comentarios

  1. jmorrison.itop…
    The accessibility section is something most email-design articles skip. Glad to see WCAG referenced explicitly.
    1. admin (editado)
      Glad it landed. Drop suggestions in the comments and we'll incorporate them on the next refresh.
  2. ravi.kumar.del…
    did our quarterly template audit using this as the rubric. Found 11 of our 14 templates had at least one accessibility issue. Worst offender: alt text on header images was literally just 'logo'.
  3. femi.adeyemi
    Any thoughts on AMP for Email? We tried it last year and gave up — Gmail-only and the maintenance overhead wasnt worth the engagement bump...
    1. admin
      short answer: yes — set the mysql session variable from your worker's .env on boot and you'll get the longer timeout per connection. we'll add an explicit recipe in the next refresh.
    2. admin (editado)
      Theres no built-in way today. Two workarounds: (1) cron + custom script polling the API every N minutes, (2) webhook-driven if your event source supports it. Most operators go with #2.
    3. admin (editado)
      Currently a manual step. There's a feature request tracking it on the repo if you want to +1...
    4. admin (editado)
      yes — strict alignment requires the from: domain to match exactly. subdomain-level (`bounce.example.com` vs `example.com`) passes relaxed but fails strict. most operators run relaxed; the rare strict-dmarc setups need explicit subdomain dkim configuration.
  4. lequan.saigon
    test in dark mode on actual devices, not ust simulators. outlook for android specifically inverts colors in ways the desktop preview never shows
    1. admin
      Worth adding to the article. PR welcome if you want to author the addition anyway
  5. nadia.r.cl
    Test in dark mode on actual devices, not just simulators. Outlook for Android specifically inverts colors in ways the desktop preview never shows.

More in Email Design & Content