WooCommerce Emails Not Sending: Order Notifications Fixed
Check whether the specific notification is enabled, whether the order status actually triggers it, and whether the site can send mail at all — three separate failures with one symptom.
Three questions, in order: is that specific notification enabled, does the order reach the status that triggers it, and can the site send email at all? Each has a different fix, and testing them out of order wastes time.
Step 1: check the notification is enabled
WooCommerce → Settings → Emails lists every notification with its own on/off switch and recipient.
| Sent when | To | |
|---|---|---|
| New order | Order is placed and payment received | Admin |
| Cancelled order | Order is cancelled | Admin |
| Failed order | Payment fails | Admin |
| Order on hold | Status set to on hold | Customer |
| Processing order | Payment received | Customer |
| Completed order | Status set to completed | Customer |
| Refunded order | Refund is issued | Customer |
| Customer invoice | Sent manually | Customer |
| New account | Account created | Customer |
| Reset password | Reset requested | Customer |
Check the recipient field on the admin ones. A mistyped address, or an address belonging to someone who left, is common on stores that have changed hands.
Step 2: check the order status
Emails are triggered by status transitions, not by orders existing.
- Processing is set when payment succeeds for a physical product.
- Completed must usually be set by you, unless the products are downloadable or a plugin automates it.
If customers report never receiving confirmation, look at whether orders are sitting in Processing. The processing email is the confirmation in that case, so the question becomes whether it is enabled — and whether the payment gateway is actually moving orders out of Pending.
Orders stuck in Pending payment never trigger anything, because as far as WooCommerce is concerned the purchase did not complete. That points at the gateway or its callback URL rather than at email.
Step 3: check the site can send mail at all
Test outside WooCommerce: request a password reset, or submit a contact form. If nothing arrives from any source, the problem is site-wide and WooCommerce settings are irrelevant.
The root cause is nearly always PHP mail() sending unauthenticated messages that Gmail and Outlook discard. The fix is authenticated SMTP with a From address on your own domain, plus SPF and DKIM records — the full procedure is in WordPress not sending emails.
For a store, use a transactional email service rather than a mailbox. Order emails are business-critical, you get a log of every message, and deliverability is materially better.
Log failures while you work:
<?php
// wp-content/mu-plugins/mail-debug.php
add_action('wp_mail_failed', function (WP_Error $error) {
error_log('wp_mail failed: '.$error->get_error_message());
});
Step 4: rule out WooCommerce-specific causes
A broken template override. If your theme copies WooCommerce email templates into yourtheme/woocommerce/emails/, an outdated copy can fatal during rendering, which stops the send. WooCommerce → Status lists outdated template overrides explicitly — check it first.
A plugin filtering recipients. Order management, invoicing and CRM extensions hook the email recipients and can empty them. Test with those disabled on staging.
Emails sent during checkout timing out. Sending happens inline with the request. A slow SMTP handshake makes checkout slow and, on a strict timeout, can drop the message. An API-based transport avoids this.
High-performance order storage. Stores migrating between legacy post-based orders and the modern order tables have, in some plugin combinations, produced missing notifications. Check for pending database updates on the Status screen.
Resend and verify
Open the order, choose the email from Order actions, and send it again. That is also the quickest way to test a fix without placing new test orders.
For a full end-to-end check:
- Place a real test order using a payment method that completes.
- Confirm the admin notification arrives.
- Confirm the customer processing email arrives at an external address.
- Mark the order complete and confirm that email arrives.
- Check headers for
spf=passanddkim=pass. - Check the spam folder as well as the inbox.
Keep it working
- Keep the mail-failure logger installed permanently.
- Use a sending service with delivery logs, so "we never got it" can be answered with evidence.
- Monitor the store's email sending after any host migration — SPF records and SMTP credentials frequently do not travel, per how to migrate a WordPress site.
- Test order emails after every WooCommerce major update, alongside a checkout test, as updating plugins safely suggests.
Frequently asked
- Admin notifications go to your own domain, which usually accepts mail from your server. Customer mail goes to Gmail and Outlook, which reject unauthenticated messages — the classic sign that SMTP is not configured.
- Completed. Orders left as Processing never trigger it, which is the most common reason customers say they never received confirmation.
- Yes. Open the order, choose the email from the Order actions dropdown, and click the action button to send it again.