Yes, and the right path depends on which emails you actually want to change. Core WordPress sends plain-text mail through wp_mail() and has no template layer at all: notifications are assembled inline in PHP with sprintf() calls. WooCommerce, by contrast, ships with a template-override system that lets you copy its order-email templates into your theme and customise them. Anything else (making core notifications look branded, applying a consistent design across every outbound message) requires an HTML-email plugin that intercepts wp_mail() and wraps every message in your template.
Three separate approaches for three different starting points. Pick the one that matches the emails you actually need to change.
Path 1: WooCommerce order emails via theme templates
WooCommerce ships its email templates as PHP files inside its plugin folder at wp-content/plugins/woocommerce/templates/emails/: Copy any of these files to wp-content/themes/<your-theme>/woocommerce/emails/ and WooCommerce will use your copy instead of its default. This is the standard theme-override pattern.
The templates that matter most:
customer-processing-order.php: the “order received” emailcustomer-completed-order.php: the “your order is on its way” emailadmin-new-order.php: the notification to the shop owneremail-header.phpandemail-footer.php: the shared wrapper around every WooCommerce email
Alongside the templates, WooCommerce provides a set of settings under WooCommerce > Settings > Emails for colour, header image, footer text, and a light branding pass without any code. Adjust these first; only drop into template overrides when the settings do not reach far enough.
Path 2: an HTML-email plugin for core and non-Woo notifications
For everything that is not a WooCommerce order email, the simplest route is a plugin that intercepts wp_mail() and wraps every outgoing message in an HTML template. Two established options:
WP HTML Mail provides a visual template designer plus overrides for WooCommerce, LearnDash, MemberPress, and many other plugins that send email. Free tier is workable.
Email Templates Customizer by Themeisle is similar in scope with a WordPress Customizer-style interface.
Both work the same way: they hook wp_mail() before the message is dispatched, apply your template around the message body, and hand the wrapped HTML off to whichever mailer plugin is handling delivery. The template lives in the plugin’s settings, so a single design applies to everything the site sends.
Test carefully after installing either. Some emails (particularly plain-text password resets) are less useful when wrapped in HTML, and both plugins expose per-template opt-outs to keep them plain.
Path 3: raw filters, for developers
Every core WordPress notification is filterable. The relevant filters:
wp_mailfilters the arguments towp_mail()before the message is sent. This is the master hook: modify body, subject, headers, attachments all in one place.wp_mail_content_typesets the MIME type. Returntext/htmland every subsequent call sends HTML.wp_mail_fromandwp_mail_from_namechange the From address and display name.- Per-notification filters exist for specific events:
retrieve_password_messagefor the password reset email,new_user_notification_emailfor the user welcome, and so on.
Writing an HTML wrapper in a mu-plugin gives you complete control at the cost of maintaining PHP. It is the right answer for a developer who wants no additional plugin overhead. Everyone else is better served by one of the plugins above.
What the mailer plugin does not do
WP Mail SMTP, FluentSMTP, and Post SMTP handle delivery, not presentation. They ensure the message reaches the recipient with authenticated SMTP; they do not modify the message body. Some mailer plugins have a “From Email” and “From Name” override that changes headers globally, and that is often all a small site needs from the branding side. But visual template customisation is a separate concern from delivery, and needs a separate plugin.
The one thing that matters more than templates
Beautiful HTML email that is not delivered is worse than plain-text email that arrives. If your WordPress site’s mail is still routing through PHP’s mail() function on a managed host, no amount of template work will matter because Gmail is rejecting the messages before the recipient sees them. Fix delivery first: see What is the best way to set up email on WordPress? and Why are my WordPress emails not being delivered?. Once mail is arriving reliably, come back to the template pass with confidence that your polish is actually being seen.
