More fixes

WooCommerce order emails not sending

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.

Order #1042 notes

What the checks found


  

Check 1: is the email switched on, and was it triggered

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.

Check 2: did WordPress hand it to a mail server that delivered it

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 each answer means

What you seeCauseFix
The email's Enable box is unticked, or the Recipient is an old addressWooCommerce was told not to send it, or sends it to someone elseTick Enable, put the right address (comma-separate several), save, resend from the order
Orders sit in Pending payment or FailedThe payment gateway never confirmed the payment, so the status change that fires the email never happenedFix 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 missingNobody marked the order Completed; a virtual or downloadable product skips it only if it was paidMark 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 allThe host blocks PHP mail(), which many hosts doInstall 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 spamThe 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 itSet 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 spamTick each customer email; add the From address to the owner's contacts and check the spam folder once
Some orders send, some do notWooCommerce queues emails in the background (Action Scheduler) and the queue is stuck because WP-Cron never runs on a quiet siteLook 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 updateA template override in your theme's woocommerce/emails/ folder is out of date, or a plugin hooks the email and errorsWooCommerce > Status lists outdated template overrides; update or remove them, and check the PHP error log for the moment the email should have gone

Check it worked

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.

What not to do

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.