Orders come in but you never get the New order email, or customers say they got no order confirmation, no receipt and no "your order has shipped" email. Some orders send and some do not, or every email lands in spam. A shop owner who misses a New order email ships late; a customer who gets no receipt opens a chargeback. Two checks tell you whether WooCommerce never sent the email or sent it and the mail server lost it.
Go to WooCommerce > Settings > Emails. Each email in the list (New order, Processing order, Completed order, Customer invoice...) has its own Enable this email notification box and, for the admin emails, its own Recipient(s) field. Open New order and check both: the box ticked and the recipient an address you actually read. Then open one order that sent nothing in WooCommerce > Orders and look at its status and the order notes on the right. The New order email fires only when an order moves from Pending payment or Failed to Processing or On hold. An order still in Pending payment or Failed never sent one, so the problem is the payment, not the email.
From the order page, use Order actions > Resend new order notification (or Send order details to customer) and click the arrow. Then send a test from any mail plugin you have, or install a free email log plugin first and resend: the log shows whether WordPress handed the email over and whether the handover failed. If the log says sent and nothing arrived, the email left your site and was dropped or filed as spam on the way, which is a sender-address and DNS problem. If the log shows an error, or WordPress has no working mailer at all, nothing ever left.
| What you see | Cause | Fix |
|---|---|---|
| The email's Enable box is unticked, or the Recipient is an old address | WooCommerce was told not to send it, or sends it to someone else | Tick Enable, put the right address (comma-separate several), save, resend from the order |
| Orders sit in Pending payment or Failed | The payment gateway never confirmed the payment, so the status change that fires the email never happened | Fix the gateway's webhook / IPN (its settings page shows the URL to add at the payment provider), then check new orders reach Processing |
| Only the Completed email is missing | Nobody marked the order Completed; a virtual or downloadable product skips it only if it was paid | Mark the order Completed (that sends it), or use a plugin or rule that does so on shipping |
| The log shows "Could not instantiate mail function" or no email at all | The host blocks PHP mail(), which many hosts do | Install an SMTP plugin and send through a real mailbox or a sending service (your email provider's SMTP, or a service like Brevo, Mailgun or SES) |
| The log says sent, nothing arrives or it lands in spam | The From address is wordpress@yourdomain or a Gmail/Yahoo address the site has no right to send as, and the domain has no SPF or DKIM record for the server sending it | Set the From address in Settings > Emails to an address on your own domain, send it through SMTP for that mailbox, and add the provider's SPF and DKIM records to your DNS |
| The shop owner gets them, customers do not (or the reverse) | The customer emails are disabled, or the owner's own mailbox filters the From address as spam | Tick each customer email; add the From address to the owner's contacts and check the spam folder once |
| Some orders send, some do not | WooCommerce queues emails in the background (Action Scheduler) and the queue is stuck because WP-Cron never runs on a quiet site | Look at Tools > Scheduled Actions for past-due actions; run them, and set a real server cron job to hit wp-cron.php every 5 minutes |
| It stopped after a plugin or theme update | A template override in your theme's woocommerce/emails/ folder is out of date, or a plugin hooks the email and errors | WooCommerce > Status lists outdated template overrides; update or remove them, and check the PHP error log for the moment the email should have gone |
Place one real test order with a payment method you can refund (or a Cash on delivery method switched on for the test). Within a minute the owner's inbox should have the New order email and the customer's inbox the Processing order email, both in the inbox, not spam. Open the customer one and look at the sender: it should be your own domain. Then refund the test order and switch the test method off.
If you would rather someone else finds why the emails stopped and fixes it, that is what the box below is for. Related: WordPress emails not sending, emails going to spam, orders stuck in Pending payment.