How to Fix WooCommerce Emails Not Sending
WooCommerce order emails missing? Follow the chain: order status → email settings → log → SMTP → recipient. Here's how to find where it stops.

Order emails are part of the buying experience. Customers need confirmation. Store teams need fulfillment notifications. When an email goes missing, the first question is: did WooCommerce generate it, or did it get lost on the way?
Follow the chain. Order status → WooCommerce email settings → email log → WordPress mail → SMTP provider → recipient inbox. The break is somewhere in that line.
Start With the Order Status
Open WooCommerce → Orders. Check the affected order's status. Different statuses trigger different emails:
- Processing — triggers "Order Confirmation" for paid physical orders
- Completed — triggers "Order Complete"
- On hold — triggers "Order On Hold"
- Pending payment — does not trigger a confirmation email
An order stuck in Pending payment usually means the payment gateway didn't confirm the transaction. Read the order notes for gateway messages and status changes.
Don't manually mark an order as paid until you've verified the payment with the gateway. That creates accounting problems later.
Confirm the Email Is Actually Enabled
Go to WooCommerce → Settings → Emails. Click the notification you're missing. Check:
- The email is enabled (toggle at the top)
- The recipient address is correct
- For admin emails, multiple addresses are separated by commas
- From name, From address, and Reply-To are filled in
Save the settings. Place a test order. Don't just assume it works—verify it.
Read the WooCommerce Email Log
WooCommerce logs transactional email attempts. Go to WooCommerce → Status → Logs. Select woocommerce-transactional-emails from the dropdown.
The log shows one of three things:
- WooCommerce didn't attempt the email. The status change didn't trigger it, or the notification is disabled.
- The send failed. You'll see errors like
wp_mail failed to sendorCould not instantiate mail function. - The email was handed off successfully. WooCommerce did its job. The problem is downstream—SMTP, provider, or the recipient's server.
The official WooCommerce email troubleshooting guide covers this flow in detail.
Check Sender Details
Use a sender address on your store's domain. For example: [email protected]. Don't use a Gmail or Yahoo address. Receiving servers often reject those as spoofed.
Don't put the customer's address in the From field. Put it in Reply-To. That way, replies go to the customer, but the sender stays authenticated on your domain.
Check SPF and DKIM Records
Your sending domain needs SPF and DKIM records. Without them, Gmail, Outlook, and Yahoo may reject or spam the email.
An SPF record looks like this:
v=spf1 include:_spf.google.com include:sendgrid.net ~all
A DKIM record is a TXT entry your provider gives you. Add it to your DNS zone.
Check your records with a tool like MXToolbox or dmarcian. Add DMARC once SPF and DKIM work. Start with a monitoring policy (p=none) before enforcing.
Use Authenticated SMTP Delivery
Many hosts send WordPress mail through basic PHP mail. That has poor deliverability. Gmail and Outlook often mark it as spam—or reject it outright.
Install an SMTP plugin:
- WP Mail SMTP — most popular. Supports Gmail, SendGrid, Mailgun, Amazon SES, and others.
- Post SMTP — good logging built in.
- FluentSMTP — lightweight, supports multiple providers.
Configure it with a transactional email service. Then send the plugin's test email and confirm the recipient gets it.
Check the provider's activity log. Look for:
- Accepted — the provider took the message
- Bounced — the recipient's server rejected it
- Rejected — the provider refused to send it
- Suppressed — the address was blocked after a prior bounce or complaint
A "sent" result in WordPress is not proof of delivery. Check the provider log.
Check Your Host's Mail Limits
Many shared hosts cap outgoing email at 100–500 per hour. When a store hits that limit, emails fail silently. WordPress doesn't always throw an error.
Ask your host for the outgoing mail limit. If the store sends a high volume, move to a transactional email provider. That removes the host limit entirely.
A store owner once moved to a new host and couldn't figure out why morning order emails stopped. The host's mail limit was 100 per hour. The store hit it every day by 9 a.m. The fix was switching to SendGrid.
Check the Recipient Side
Ask the recipient to check their spam folder, quarantine, and company mail filter. Transactional providers also suppress addresses after a hard bounce or spam complaint.
If the address was suppressed, remove it from the suppression list only if the address is valid and the provider allows it. Some providers require a request from the address owner.
If WooCommerce Isn't Generating the Email at All
If the email log shows no attempt, the problem is on the WooCommerce side, not delivery.
Check the PHP error log. Look for a fatal error around the moment the order status changed.
Then test on staging:
- Switch to a default theme (Twenty Twenty-Four or Storefront)
- Disable all plugins except WooCommerce and your payment gateway
- Place a test order
- Check whether the email now generates
If it does, reactivate plugins one at a time. Custom email builders, checkout modifications, and order-status plugins are common culprits.
What Actually Fixes WooCommerce Email Problems
Most missing order emails come down to a disabled notification, a stuck order status, a mail limit, or missing SPF/DKIM records. Work through the chain in order. The log tells you where it stopped.
Once email delivery works, send a test order to yourself. Check that it arrives in the inbox, not spam. Then place a real order and verify the customer gets theirs too.
Share





