WooCommerce Not Sending Order Emails? 8 Fixes That Work (Customer and Admin)
WooCommerce order emails fail because the email is switched off, the order never reaches the right status, or server mail is blocked. Fix it step by step.
On this page
- WooCommerce order emails fail because the email is disabled, the order never reached the triggering status, or PHP mail is blocked.
- Check WooCommerce > Settings > Emails, then send mail through an SMTP plugin with a From address on your own domain and SPF, DKIM and DMARC records.
- Manual orders and bank transfer orders behave differently, and Tools > Scheduled Actions shows emails stuck behind a stalled WP-Cron.
WooCommerce is not sending order emails because the notification is switched off, the order never reached the status that triggers it, or your server's default PHP mail is being blocked or sent to spam.
The third cause is the most common. WordPress sends mail through PHP's mail() function unless you tell it otherwise, and many hosts limit it or receiving servers distrust it. The fixes below go from quickest to most involved.
First, find out which emails are missing
- Only the admin "New order" email is missing: usually a wrong recipient address or the shop's own inbox filtering it.
- Only customer emails are missing: usually deliverability (spam folders, no SPF or DKIM) or a payment that never moved the order to Processing.
- No emails at all, including password resets: the server isn't sending mail. Go straight to fix 3.
How to fix WooCommerce order emails
- Check each email is enabled. Go to WooCommerce > Settings > Emails. Click Manage next to New order, Processing order and Completed order, and make sure Enable this email notification is ticked. For New order, check the Recipient(s) field; it often still holds an old developer's or agency's address.
- Check the order status. Customer emails fire on status changes, not on order creation. The Processing order email goes when an order moves to Processing, and the Completed email when you mark it Completed. Orders stuck in Pending payment or Failed send no customer email. If online payments stay Pending, the gateway's callback isn't reaching your site; see payment gateway not working.
- Send mail through SMTP. Install an SMTP plugin such as WP Mail SMTP, FluentSMTP or Post SMTP and connect it to a real mailbox or sending service (Google Workspace, Zoho, Brevo, Amazon SES or your host's email). Use the plugin's Send a test email tool. If the test arrives, order emails will too. Our WordPress SMTP guide covers the settings for each provider.
- Use a "From" address on your own domain. In WooCommerce > Settings > Emails, scroll to Email sender options. Set "From" address to something like orders@yourdomain.com, not a Gmail address. Gmail and Yahoo reject or junk mail that claims to be from their domains but comes from your server.
- Add SPF, DKIM and DMARC records. Without them, customer emails land in spam even when they are sent. Add the records your mail provider gives you in your domain's DNS. See SPF, DKIM and DMARC explained.
- Check the email log. Most SMTP plugins can log every message. If WooCommerce emails appear in the log as sent, the problem is delivery (spam or the recipient's server). If they don't appear at all, WooCommerce never triggered them; go back to fixes 1 and 2.
- Check scheduled actions. Some stores and plugins send emails in the background. Go to Tools > Scheduled Actions and look at the Pending and Failed tabs. A long Pending queue means WP-Cron isn't running, often because the site gets little traffic or cron is disabled in
wp-config.php. Set up a real server cron job that callswp-cron.phpevery few minutes. - Rule out a plugin conflict. Check WooCommerce > Status > Logs for fatal errors around the order time. Then, on a staging copy, deactivate plugins other than WooCommerce and your SMTP plugin, place a test order, and reactivate them one at a time. Email customiser and order status plugins are frequent causes.
Edge cases most guides skip
- Manual orders don't email automatically. When you create an order in WooCommerce > Orders > Add order, the customer gets nothing until you choose Send order details to customer from Order actions and click Update.
- Cash on delivery orders go to Processing. Bank transfer (BACS) and cheque orders go to On hold instead, which sends the On-hold order email, not Processing. If you disabled On-hold, those customers get nothing.
- Your own inbox may hide them. If the From address and the admin recipient are the same mailbox, some providers file the message as sent mail or drop it. Use a different recipient for New order emails.
- Host sending limits. Shared hosting often caps outgoing mail per hour. A sale or bulk status update can hit the cap and the rest silently fail. A dedicated sending service avoids this.
- A staging copy with mail disabled. If the live site was cloned from staging, a "disable emails" setting or plugin may have come across with it.
If emails still don't arrive after SMTP is working, the problem is usually in the order flow or a plugin. Our WooCommerce developer service can trace it on a staging copy and fix it without touching live orders. To change how the emails look rather than whether they send, see customising WooCommerce emails.
FAQs
Why does WooCommerce send the admin email but not the customer email?
Usually the order didn't reach Processing (so no customer email fired), or the customer's provider put it in spam. Check the order notes, which record each email sent.
Do I need an SMTP plugin for WooCommerce?
For a store, yes in practice. PHP mail works on some hosts but has no authentication, so it is far more likely to be blocked or junked.
How do I resend a WooCommerce order email?
Open the order, choose Resend new order notification or Send order details to customer under Order actions, and click Update.
Need help with your website?
I'm a freelance WordPress developer building fast, SEO-friendly websites since 2020. Tell me what you need and I'll reply with a plan and a fixed quote, usually within 24 hours.


