Why Aren't WooCommerce Emails Sending at All?
Why This Happens
PHP's mail() function sends email directly from the web server without any of the authentication (SPF, DKIM) that inbox providers increasingly require to trust a message as legitimate, which means messages sent this way are frequently silently dropped or filtered as spam before ever reaching an inbox. Many hosts also restrict or completely disable outbound mail via this function for exactly this reason, making it an inherently fragile default rather than a genuine WooCommerce bug.
Common Causes
- No SMTP plugin configured, leaving the site relying on PHP's unreliable default mail function.
- An SMTP plugin configured but with incorrect credentials (wrong port, expired API key, wrong sending domain), which can fail silently without an obvious error visible in WordPress itself.
- The sending domain not properly authenticated (missing SPF/DKIM DNS records) even with SMTP configured, causing messages to be accepted by the SMTP service but rejected or spam-filtered by the recipient's provider.
- A specific WooCommerce email disabled under Settings → Emails, which is easy to overlook if only one type of email (not all of them) is missing.
- The customer's own spam/junk folder, worth ruling out directly with the customer before assuming a sitewide sending problem.
How to Fix It
- Install and properly configure an SMTP plugin using a reputable transactional email service, rather than relying on PHP's default mail function.
- Confirm SPF and DKIM DNS records are correctly set up for the sending domain.
- Send a test email through the SMTP plugin's own testing tool to confirm delivery end to end.
- Check WooCommerce → Settings → Emails to confirm the specific email type in question is actually enabled.
Emails still unreliable after checking these? See WooCommerce fixes for a proper diagnosis.
Go deeper
- Full diagnostic guide: WooCommerce Orders Completing, But No Emails Arrive? — the step-by-step version of this problem, with the likely causes in the order worth checking.