How to set up WooCommerce email notifications
WooCommerce sends each order email when an order reaches a certain status, to the store or to the customer. Set the recipients and the sender under WooCommerce, then Settings, then Emails, send through a mail service that vouches for your domain, and read WooCommerce's email log when one is missing.
- By
- WP Ministry
- Updated
In short
- Three emails go to the store and the rest go to the customer. Most are sent by a change of order status.
- An order still in "Pending payment" sends no email. That is the usual reason one seems to be missing.
- Set the sender to an address at the store's own domain, never a free webmail address.
- WooCommerce logs each email it tries to send as Sent, Failed, Disabled or Skipped. Read the log before changing anything.
- In that log, "Sent" means handed to the server. Delivery depends on a mail service and on SPF, DKIM and DMARC records.
- Change the logo, colors and wording in the settings. A template copied into the theme no longer follows WooCommerce's updates.
WooCommerce's order emails are set up on one screen: WooCommerce, then Settings, then Emails. Each email is sent by an event, usually an order changing status, and goes either to the store or to the customer. Setting them up is three jobs: say who receives the store's notices, say who the emails come from, and check that each email you rely on is switched on.
Setting them up does not get them delivered. WooCommerce hands every message to WordPress, which hands it to the web server, and what happens after that is out of WooCommerce's sight. The other half of the work is sending through a mail service that vouches for your domain, and knowing where to look when a customer says nothing arrived.
The emails WooCommerce sends, and who gets each
| Goes to | Sent when | |
|---|---|---|
| New order | The store | A new order is received. |
| Cancelled order | The store | An order is marked cancelled, if it was "Pending payment", "Processing" or "On hold" before. |
| Failed order | The store and the customer | An order is marked failed, if it was pending or on hold before. The customer's copy says the payment did not go through and asks them to try another payment method. |
| Order on-hold | The customer | An order is put on hold from pending, cancelled or failed. |
| Processing order | The customer | Payment has been received. |
| Completed order | The customer | You mark the order completed, which usually means it has shipped. |
| Refunded order | The customer | The order is refunded, in part or in full. |
| Order Details | The customer | You send it by hand from the order's screen, to share the invoice details and a payment link. |
| Customer note | The customer | You add a note to the order that is meant for the customer. |
| Reset password | The customer | The customer resets their password. |
| New account | The customer | The customer signs up at checkout or on the account pages. |
The list on your store may be longer: optional features and extensions add emails of their own.
The customer hears nothing while an order sits in "Pending payment", because no email belongs to that status. And a customer who pays by an offline method with no immediate confirmation, such as the BACS gateway, gets "Order on-hold" first. The order waits in "On hold" until you confirm the payment and change its status.
Set who receives the store's notices and who the emails come from
Step 1: Open the email settings
Go to WooCommerce, then Settings, then Emails. The list of emails is at the top and the sender options are beneath it.
Step 2: Send the store's notices to someone who reads them
"New order", "Cancelled order" and "Failed order" are the three that go to the store. Select Manage beside each one and look at "Recipient(s)". It defaults to the site administrator's address under Settings, then General, which may still belong to whoever built the site. Enter the addresses that should receive the notice, separated by commas, and save.
Step 3: Set the "From" name and address
The "From" name and "From" address fields set who customers see as the sender. Use the store's name, and an address at the store's own domain, such as orders@example.com.
Step 4: Decide where replies go
"Add "Reply-to" email" is off by default. A customer's reply then goes to the "From" address, so that address has to be a mailbox someone reads. Turn the option on to send replies to another inbox. With it off, your own reply to a "New order", "Cancelled order" or "Failed order" notice goes to the customer's billing email address.
To undo any of this, put the old values back and save.
Why the "From" address should be on your own domain
A message that claims a Gmail or Yahoo address but was sent by your web server did not come from that provider, and the receiving side can see the mismatch. WooCommerce's documentation says such mail is likely to land in spam or be blocked, and Google's sender guidelines tell senders not to impersonate Gmail "From:" headers. The DNS records that vouch for a message, covered below, exist only for a domain you control.
Switch an email on or off, and change its wording
Select Manage beside an email to open its own settings.
- "Enable/
Disable". Tick "Enable this email notification" to send the email and untick it to stop. "Order Details" cannot be switched off, because it is only ever sent by hand. - "Subject" and "Email heading". Leave either blank to use WooCommerce's default. To go back to the default later, empty the field and save.
- "Additional content". Text that appears below the main content of the email.
- "Email type". Plain Text, HTML or Multipart. Multipart sends both versions and the customer's mail program picks one. In plain text, fields are cut at 155 characters, so long product names can be shortened.
The subject, heading and additional content accept placeholders that WooCommerce fills in: {site_, {site_, {order_ and {order_. A subject for "Completed order" could read:
Your {site_title} order {order_number} is completeTest the emails before a customer does
Step 1: Preview an email and send yourself a test
On the email settings screen, the Email Preview section shows any email as it will look on a desktop or on a phone. Use "Send a test email" there with an address you can check. If it arrives, mail is leaving the site and reaching that inbox. It does not show that a real order sends the right email.
Step 2: Place a test order
WooCommerce's guidance is to test on a staging copy of the store, with the payment gateway in its test or sandbox mode. A test order sends order emails just as a real one does. Use an address of your own as the customer.
Step 3: Check both inboxes
The store's recipient should get "New order". The customer's address should get "Processing order", or "Order on-hold" if the payment method waits for confirmation. Then change the order's status to "Completed" and check that "Completed order" arrives.
Step 4: Check the live store without paying
A staging copy may not send mail the way the live store does. On the live store, use "Send a test email" again to show that mail leaves it. Then open the next real order and read its notes: WooCommerce adds a private note for each order email it sent or failed to send. Before paying on the live store with your own card, read your payment provider's rules: Stripe's testing documentation says its services agreement prohibits testing in live mode using real payment method details.
Step 5: Delete the test orders
Otherwise they can be shipped by mistake or counted in your reports.
Why a customer got no email
There are four explanations: the order never reached the status that sends the email, the email is switched off, it was sent and treated as spam, or mail is not leaving the server at all. Two places tell them apart.
Look at the order first
Open the order under WooCommerce, then Orders. Read its status, then the "Order notes" panel, where WooCommerce and the payment gateway record status changes and payment results.
- "Pending payment", and your payment provider shows no payment. Nothing is wrong. The customer left the payment page or the card was declined, and an unpaid order sends no email.
- "Pending payment", and the provider shows the payment as taken. This is a payment fault, not an email fault: the order was never updated. See how to fix WooCommerce payment gateway errors.
- No order, or an error at checkout. An error from a plugin, the theme or custom code can stop an order before its status changes, and then no email is sent. See how to fix a WooCommerce checkout that is not working.
- "On hold". The customer was sent "Order on-hold", not "Processing order".
Then read WooCommerce's email log
WooCommerce logs each attempt to send one of its own emails. Go to WooCommerce, then Status, then Logs, and open the log source named transactional-emails. Find the entry for the order.
| Outcome | What it means | What to do |
|---|---|---|
| Sent | WooCommerce handed the email to the site's mail system. | The fault is in delivery. Ask the customer to check spam, then see the next section. |
| Failed | The site's mail system returned an error. The entry usually gives the reason. | Mail is not leaving the server. How to fix WordPress not sending email has the test and the fix. |
| Disabled | That email is switched off. | Open the email with Manage and tick "Enable this email notification". |
| Skipped | Something the email needs was missing, such as a recipient. | Supply it. For a store notice, fill in "Recipient(s)". |
Sent and failed attempts are also added to the order itself as private notes. Disabled and skipped emails appear only in the log.
"Sent" is a narrow word. WooCommerce sends through WordPress's wp_ function, and WordPress's reference says its success means the request was processed without an error, not that the message was received. A message stopped by a filter in front of the customer's mailbox never reaches the spam folder either.
If the log has no entries at all, go to WooCommerce, then Status, then Logs, then Settings. Check that logging is enabled and that the threshold is not hiding INFO or NOTICE entries. If a paid order still has no entry, WooCommerce's documentation points to a fatal error or a conflict: see how to find and fix a WordPress plugin conflict.
Send the customer what they missed
Do not count on a missed email going out later. Once the cause is fixed, open the order and use one of these.
- The order's details. In the "Order actions" dropdown, choose "Send order details to customer". WooCommerce sends the "Order Details" email.
- A message of your own. Under "Order notes", type the note, choose "Public note to customer" under "Visibility" and send it with the button beneath. It is emailed at once, and deleting the note afterwards does not recall the email.
Make sure the emails are delivered
Send through a mail service, not the web server
Left alone, a message goes from WooCommerce to WordPress, from WordPress to PHP, and from PHP to whatever mail program the web server has. WooCommerce's documentation advises a dedicated SMTP provider instead, on shared and virtual hosting in particular. A plugin makes the connection: the provider's own, or a general SMTP plugin that works with any provider.
How to fix WordPress not sending email has the steps for choosing a service and connecting it.
If test emails then arrive from an address other than the one in WooCommerce's settings, check the SMTP plugin's own sender setting. WordPress lets a plugin change the sender through its wp_ filter.
Authenticate the domain
Three kinds of DNS record let a receiving server check that your mail is yours.
- SPF lists the servers allowed to send mail for the domain.
- DKIM adds a signature to each message, which the receiver checks against a record in your DNS.
- DMARC tells the receiver what to do with a message that passes neither.
Google's sender guidelines set out what mail to personal Gmail accounts needs. Every sender must set up SPF or DKIM for the sending domain. A sender of more than 5,000 messages a day to Gmail accounts must set up SPF, DKIM and DMARC, and the domain in the "From:" header must be aligned with the SPF or DKIM domain. Google recommends all three for every domain, and says that mail without authentication may be marked as spam or rejected.
Your mail service gives you the SPF and DKIM records to add. If your host delivers the store's mail, ask the host whether it is authenticated with all three. The same error page has the steps for adding the records, a DMARC record to start with, and how to read the result in a message's headers.
Change how the emails look
In the settings
The email settings screen has an Email Template section. "Logo" and "Footer text" are always available. "Logo width", "Header alignment" and "Font family" need "Email improvements" switched on, under WooCommerce, then Settings, then Advanced, then Features. The color palette can follow your theme with "Sync with theme", or you can set "Accent color", "Email background", "Content background", "Heading & text" and "Secondary text" yourself.
By overriding a template
Those settings survive updates, but they do not change the structure of an email. Each email is built from PHP templates in WooCommerce's templates/ folder. Do not edit them there: a plugin update deletes the old files and puts fresh ones in their place.
Instead, copy the template into a folder named woocommerce in a child theme, keeping the same path but without templates. For the "New order" email:
wp-content/plugins/woocommerce/templates/emails/admin-new-order.php
wp-content/themes/your-child-theme/woocommerce/emails/admin-new-order.phpThe second file now replaces the first. The settings page of each email names its template at the bottom and has a button that copies the file to your theme. If you have no child theme yet, see how to create a WordPress child theme.
On our WooCommerce maintenance service, each week's updates are tested on a staging copy of the store before they reach the live one.
When to get help
If the log says "Sent", your domain passes SPF, DKIM and DMARC, and customers still report missing emails, the answer is in the mail service's own delivery log, read against your DNS records. If paid orders leave no entry in the log and switching plugins off finds nothing, it needs someone who can read the PHP error log.
Common questions
Does WooCommerce send an email for an order in "Pending payment"?
No. An order in that status has been placed and not paid, and no email is tied to it. The customer's first email comes when the order leaves that status, for example to "Processing" or "On hold". To reach a customer with an unpaid order, use "Send order details to customer", which emails them a link to pay.
The customer got their email, but the store did not get "New order". Why?
They are separate emails with separate settings. Open "New order" with Manage, and check that it is enabled and that "Recipient(s)" holds an address someone reads. Then read the transactional-emails log. "Skipped" points to a missing recipient. "Sent" means the message left WooCommerce, and the place to look is that mailbox's spam folder.
Do I need SPF, DKIM and DMARC if the store sends only a few emails a day?
Google requires SPF or DKIM from every sender to personal Gmail accounts, whatever the volume, and recommends all three. All three become a requirement above 5,000 messages a day to Gmail accounts.
- Glossary termAction Scheduler
- Error fixHow to fix WooCommerce not sending order emails
- Error fixHow to fix WooCommerce payment gateway errors
- Error fixWooCommerce add to cart not working: find the cause and fix it
- ResourceWooCommerce checkout is down: a runbook
- Cost guideWooCommerce maintenance cost: why a store costs more, and what the extra should buy

