Why WooCommerce Emails Stop Working
WooCommerce sends emails through WordPress's wp_mail() function, which uses PHP's mail() by default. Most shared hosting providers block or restrict this. The result: emails look like they're sending but never arrive.
This is one of the most common WooCommerce support issues, and it's almost always an SMTP configuration problem — not a WooCommerce bug.
Step 1: Check WooCommerce Email Settings
Go to WooCommerce → Settings → Emails.
Confirm:
- "New order" notification is enabled and has a valid recipient address
- "Customer processing order" is enabled
- The "From" email address is from your actual domain (not a Gmail/Hotmail address)
Step 2: Send a Test Email
Still in WooCommerce → Settings → Emails, open any email template and click "Send test email."
- If the test arrives → WooCommerce is working, the problem is order status triggers
- If the test doesn't arrive → WordPress mail delivery is broken
Step 3: Install WP Mail SMTP
This plugin replaces PHP mail with a proper SMTP connection. It's free and solves 90% of WordPress email problems.
WooCommerce → Plugins → Add New → search "WP Mail SMTP"
Recommended SMTP providers (free tier):
| Provider | Free limit | Best for |
|---|---|---|
| Brevo (Sendinblue) | 300/day | Most sites |
| Mailgun | 100/day | Developers |
| SendGrid | 100/day | Higher volume |
| Gmail SMTP | 500/day | Personal projects |
Configure WP Mail SMTP with your SMTP credentials, then use its test tool to send a test email.
Step 4: Check Spam Folders
Ask a customer to check spam. Gmail especially filters transactional emails from shared hosting IPs.
If emails land in spam:
- Add an SPF record to your domain's DNS
- Add a DKIM record (your email provider will generate this)
- Make sure your "From" address matches your domain
Step 5: Check Order Status Flow
WooCommerce only sends emails on specific status changes:
| Status change | Email sent |
|---|---|
| Pending → Processing | Customer: "Order received" |
| Processing → Completed | Customer: "Order complete" |
| Any → On-hold | Customer: "Order on hold" |
If orders are jumping straight to "Completed" (common with downloadable products or some payment gateways) — the "Processing" email never fires.
Check: WooCommerce → Orders — what status do new orders land in?
Step 6: Check for Plugin Conflicts
Some plugins hook into WooCommerce email sending and break it accidentally. To test:
- Deactivate all plugins except WooCommerce
- Place a test order
- If email arrives → reactivate plugins one by one to find the conflict
Step 7: Check the Error Log
Add to wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Place a test order and check wp-content/debug.log for any mail-related errors.
The Fast Fix
In 9 out of 10 cases: install WP Mail SMTP, configure it with a free Brevo or Mailgun account, done. Takes about 15 minutes.
If it's more complex — a conflict, a custom plugin interfering, DNS misconfiguration — describe what you're seeing and I'll diagnose it quickly.