
Email Preview for WooCommerce — preview any store email on a real order and send a test copy
A WooCommerce plugin that shows any store email on a real order before a customer sees it: WooCommerce emails, custom order statuses and emails from other plugins, HTML and plain text, phone width, subject, recipients, Cc and Bcc. A test copy goes only to the addresses you type — the order is not touched. The base version is free; Pro adds a log of every email with resend, preview in any language, every email of an order in one click and a staging mode.
- Compatibility
- WordPress 6.2+ · WooCommerce 8.0+ (tested on WordPress 7.1 and WooCommerce 11.1) · PHP 7.4+ · HPOS and classic order storage · WooCommerce block email editor
- Licence
- one site, annual
- Trial
- 7 days, no card, one per site
- Updated
- September 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
Key points
What the customer sees
Nothing — and that is the point. The plugin works only in the admin: no script appears on the storefront, and the customer receives exactly the same emails as before.
What the admin gets
The plugin adds WooCommerce → “Email Preview” with the tabs “Preview”, “Email log” (Pro) and “Settings”.
Pro: log, languages and staging mode
Email log. Pro records every WooCommerce email the store sends: when, which email, order, recipient, subject and status.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
WordPress 6.2+ and WooCommerce 8.0+. The end-to-end run was on WordPress 7.1 and WooCommerce 11.1.
PHP 7.4+. The run was on PHP 8.3, the syntax was also checked on 7.4.
Order storage. HPOS and classic storage — the order-screen box was checked in both.
WooCommerce block email editor — the preview and the test copy show the edited template.
Mail. Test copies go through wp_mail(), so SMTP plugins work as for regular emails. Checked through an SMTP trap; particular SMTP plugins were not tested separately.
Large stores. The list shows the latest 25 orders; any other opens by number. There is no search by customer.
Fulfillment emails appear only when this WooCommerce feature is switched on; we have not checked them on such a store.
Version history
First public release: preview of every order email on real orders and the WooCommerce sample, HTML and plain text, phone width, separate tab, subject and all recipients, a test copy to 5…
Frequently bought with Email Preview for WooCommerce
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
Email Preview for WooCommerce is a plugin that shows any store email on a real order before a customer sees it. Pick an email and an order — and you see it exactly the way WooCommerce builds it for that order: the real products, prices, discounts, addresses, notes and refunds, the subject and heading with their placeholders filled in, the recipient, Cc, Bcc, From and Reply-to.
Without a plugin there is only one way to check an email — place a test order and wait for the mail, or change the status of a real order and hope the customer does not get anything extra. Email Preview sends nothing while you look: the preview does not change the order — it adds no notes, sets no “email already sent” flag and does not write to the customer. When you need to check delivery itself, a test copy goes only to the addresses you typed.
What the customer sees
Nothing — and that is the point. The plugin works only in the admin: no script appears on the storefront, and the customer receives exactly the same emails as before. The difference is that now you see those emails in advance: what “Processing order” looks like with a coupon, what “Partially refunded” says, whether the subject of a custom-status email is empty, whether the product table reads well on a phone.
Before the preview, the plugin shows the email’s subject, who it goes to, the Cc and Bcc from the email settings, From and Reply-to. If the email is switched off in WooCommerce → Settings → Emails, you get a warning: customers do not receive it. If the order has no e-mail, the panel says plainly that WooCommerce will skip this email.
What the admin gets
The plugin adds WooCommerce → “Email Preview” with the tabs “Preview”, “Email log” (Pro) and “Settings”. The first visit shows the latest order and the email its customer got for the current status straight away — no setup at all.
- Any email. The list holds every order email registered in WooCommerce: the 13 emails of WooCommerce 11.1 itself, emails of custom order statuses and emails added by other plugins or the theme — as a separate group.
- Any order. The latest 25 orders in the list, or any order by number in “or order ID”. For a new store with no orders — the WooCommerce “Sample order” with made-up data.
- HTML or plain text. “As configured”, HTML or the plain-text version — even when the store sends HTML.
- Desktop or phone. The “Phone (375 px)” button narrows the email to smartphone width, “Open in a new tab” shows it as a page of its own.
On the right is the “Send a test copy” form: up to 5 addresses separated by commas. Only they get the copy, with [Test] in the subject (the prefix is changed in the settings); the Cc and Bcc from the email settings are not added, the customer receives nothing, and no note appears in the order. The “Include attachments” box asks invoice plugins for their PDFs — it is off by default, because some invoice plugins create a real invoice with a number at that moment (PDF Invoices & Packing Slips does — we checked).
On the order screen itself an “Email preview” box appears: its button opens the email for the current status, and “Other emails” — any other email of this order. The box works with both HPOS and classic order storage.
The “Settings” tab holds the default address for test copies (empty = your account e-mail), the test copy subject prefix, “Delete all plugin data when the plugin is deleted”, and for Pro — the licence, the log and staging mode. The plugin’s interface is translated into Ukrainian and Russian; the email in the preview is in the site language, the way WooCommerce sends it.
Pro: log, languages and staging mode
Email log. Pro records every WooCommerce email the store sends: when, which email, order, recipient, subject and status. If the mail did not go out, the row is marked “Failed” together with the error text — for example, “SMTP Error: Could not connect to SMTP host”. Filters by order number, email type and status. Every row can be previewed or sent again. The log is kept for 30 days (configurable).
“Resend” is the real email, not a test copy: WooCommerce sends it, so the copies from the settings get it too, and WooCommerce 10.9+ writes its own “email sent” note to the order. That is intended — it is a repeat of the real email.
Any language. Pro shows the email and sends a test copy in any language installed on the site — for example, a Ukrainian email with an English admin. The plugin does not pick up the order language from WPML or Polylang automatically — you choose it by hand.
Every email of an order in one click. The “Send every email of this order” button sends one test copy of each order email (switched-off ones included) to the addresses you typed — a full check in one inbox. In the test that was 13 copies and not a single note in the order.
Staging mode. For a copy of a live store or a test run of the checkout: every WooCommerce email goes to one address, with the original recipient in the subject. While the mode is on, a warning sits on every admin screen so you do not forget to switch it off. The mode redirects only WooCommerce emails — WordPress emails and those of other plugins go out as usual.
How it works — step by step
- You pick an email and an order (or the sample) on the “Preview” tab or in the box on the order screen.
- The plugin takes the WooCommerce email object itself and prepares it the way WooCommerce does before sending: the order, the recipient, the values for subjects and headings, the customer note, the refund data.
- The email’s own send routine is not called — in WooCommerce that is what sets the “already sent” flag and writes notes. So the order stays unchanged.
- The email is built with the same WooCommerce methods as a real send: subject, content (including the block email editor), inline styles and the email content filters.
- You see the result in an isolated frame without scripts — at desktop or phone width — with the subject and all recipients next to it.
- A test copy goes through wp_mail() only to the addresses you typed: Cc and Bcc are stripped, the subject gets the
[Test]prefix.
How much it costs
Pro is 990 UAH, a one-year licence. A year of updates, technical support and all Pro features. You can take a longer term right away — the longer, the cheaper per year:
- 1 year — 990 UAH
- 2 years — 1,880 UAH (−5%, 940 UAH a year)
- 3 years — 2,610 UAH (−12%, 870 UAH a year)
- 4 years — 3,250 UAH (−18%, 810 UAH a year)
- 5 years — 3,710 UAH (−25%, 740 UAH a year)
No automatic charges: renewal is manual, reminders come by e-mail. A purchased licence keeps the Pro features for good — when the term ends, the shop only stops getting new versions and support. One key — one domain.
Trial first, payment later. The 7-day Pro trial is started with the “Try Pro for 7 days” button in the plugin settings, the key comes by e-mail, no card is needed, and the trial never starts by itself. After the trial only the Pro features switch off; preview and test copies keep working.
Under the hood
- No trigger(). The email’s own WooCommerce send method is not called: in core it sets the “new order email sent” flag, and since WooCommerce 10.9 every send writes a note to the order. A clone of the email is prepared by hand and rendered with public WooCommerce methods.
- Safe preview. The email is shown in a sandboxed frame with no permission to run scripts; the separate tab is served with CSP
script-src 'none'. The page is available only to users who can manage WooCommerce. - Third-party emails. The
catcode_emp_prepare_emailhook lets developers fill the fields their email fills only in its own send. - The sample order uses WooCommerce’s built-in preview class. If WooCommerce ever changes it, the sample will show an error, while real orders keep working.
- The Pro log is a separate table cleaned up by cron.
- Deletion with “Delete all plugin data” ticked removes the table, the settings and the cron. With WP-CLI, data is removed by
wp plugin uninstall, not bywp plugin delete.
How to install
- Download the
catcode-email-preview-for-woocommerce-1.0.0.ziparchive with the button at the top of the page: Plugins → Add New → Upload Plugin → Install → Activate. Pro is switched on in the same plugin with a key or a trial. - Open WooCommerce → “Email Preview” — you see the latest order and its email right away.
- Pick another email or order and press “Preview”. To check delivery, enter your address and press “Send test copy”.
- For Pro: paste the licence key from the e-mail after payment, or press “Try Pro for 7 days” in the “Pro licence” section of the “Settings” tab.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Does the customer get anything while I look at an email?
No. The preview only builds the email; it sends nothing and does not change the order: no notes, no "email already sent" flags. A test copy goes only to the addresses you typed in "Send to" — the Cc and Bcc from the email settings are not added to it.
How is this different from email designers?
Email Preview is not a template builder. It shows the email the way your WooCommerce builds it for a particular order, with your templates, theme and plugins. People run it next to any designer or without one — to check what the customer actually receives.
An email from another plugin shows empty spots.
Some plugins fill their own fields only at the moment of a real send. The email still opens, but those fields stay empty. A developer can fill them for the preview with the catcode_emp_prepare_email hook, which receives the email object and the order.
What is the "Include attachments" box for, and why is it off?
With it, the plugin asks invoice plugins for their files, as a real send does. We checked it with PDF Invoices & Packing Slips: at that moment the plugin creates a real invoice with a number for the order. That is why the box is off by default and carries a warning — tick it only when you are testing attachments.
Why is the email in HTML although I chose "Plain text"?
When the WooCommerce block email editor is on, the store sends every email as HTML, and a plain-text version simply does not exist. The preview says so.
Is "Resend" in the Pro log a test copy?
No, it is the real email: WooCommerce sends it, so the Cc and Bcc from the settings get it too, and WooCommerce 10.9+ adds its own "email sent" note to the order. To check without the customer, use the test copy or "Send every email of this order".
Does staging mode catch all of the site's mail?
Only WooCommerce emails. WordPress emails (password reset, registration) and emails of other plugins that go straight through wp_mail() are left alone.
How much does it cost?
The base version is free. Pro is 990 UAH per year, and a longer term is cheaper: 2 years — 1,880 UAH, 5 years — 3,710 UAH. No automatic charges. A purchased licence keeps the Pro features for good; the term covers updates and support.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—


