How to Edit and Customize WooCommerce Emails (MailPoet & Klaviyo)

how edit mailpoet woocommerce email

Table of Contents

Default WooCommerce emails look like 2014. Plain header bar, beige content box, “Thanks for shopping with us” in whatever font the recipient’s mail client decides to render. Anyone Googling how edit MailPoet WooCommerce email defaults runs into the same affiliate listicles. I rebuilt the email stack for a candle store last December — the owner was running roughly $80K/month across 1,400 orders and had not opened WooCommerce → Settings → Emails once in two years. Open rates went from 22% to 41% after a two-hour template rewrite. Not a sales pitch. A story about how nobody bothers.

Why the WooCommerce email defaults are the wrong starting point

The native WooCommerce email system inherits from class-wc-email.php and renders through the wc_get_template loader, with every option living in the WooCommerce settings reference. Every transactional email (new order, cancelled, processing, completed, customer note, password reset) runs through the same email-header.php and email-footer.php files.

If you only know how to customize WooCommerce emails through the Settings → Emails tab, you are limited to:

  • Header image
  • Base color
  • Background color
  • Body background color
  • Body text color
  • Footer text

Six fields. That is the entire visual budget the dashboard hands you. No fonts. No spacing. No mobile breakpoints. No conditional content. Most agencies stop here and call it done. Most agencies are wrong.

How edit MailPoet WooCommerce email defaults from the dashboard

MailPoet is the most installed WooCommerce email plugin on wordpress.org with over 600,000 active installs as of early 2026. It hijacks WooCommerce transactional emails the moment you tick “WooCommerce emails” in MailPoet → Settings → WooCommerce.

Once that checkbox is on, MailPoet does not edit your existing templates. It replaces them. Header, footer, and body wrapper now come from MailPoet → Emails → WooCommerce Emails Customizer. Your wp-content/themes/your-theme/woocommerce/emails/ overrides are ignored.

This is the part that confuses people. They learn how edit MailPoet WooCommerce email layouts, edit template files in their child theme, and wonder why nothing changes.

To actually edit a transactional email through MailPoet:

  1. Go to MailPoet → Settings → WooCommerce and confirm “WooCommerce emails” is enabled.
  2. Visit MailPoet → Emails → WooCommerce Emails Customizer.
  3. Pick the email type (New Order, Processing, Completed, Cancelled, Refunded, Failed, On Hold, Customer Invoice, Customer Note).
  4. Use the drag-and-drop editor. The 600px content width is the same email-client limit you would hit anywhere else; do not fight it.
  5. Hit Save & Activate. MailPoet flips an option in the database that overrides wc_mail().

If changes save but never appear in test sends, clear transient cache. WP-Optimize and W3 Total Cache both cache email output for some reason.

How to edit WooCommerce emails without MailPoet (native code path)

If MailPoet is overkill — and for a store under 500 orders/month with no segmentation needs, it usually is — you can edit WooCommerce emails directly through theme overrides. This is the path I take on most builds because it touches one fewer plugin.

The override path is documented in the WooCommerce template structure guide. Short version:

wp-content/themes/your-child-theme/woocommerce/emails/
├── customer-completed-order.php
├── customer-processing-order.php
├── customer-on-hold-order.php
├── email-header.php
├── email-footer.php
└── email-styles.php

Copy any file from wp-content/plugins/woocommerce/templates/emails/ into your child theme’s woocommerce/emails/. WooCommerce loads the child theme version through wc_get_template. Edit the PHP. Done.

Warnings from production builds:

  • email-styles.php holds the inline CSS. Mail clients ignore external stylesheets and most strip