Website Email Problems
WooCommerce Emails Not Sending
Last reviewed
Direct answer
WooCommerce order and customer emails fail when a notification is disabled or mistargeted, the order never reaches the status that triggers mail, wp_mail/SMTP cannot hand off the message, or inbox providers reject unauthenticated From addresses—confirm the email is enabled and logged first, then fix transport and SPF/DKIM before rewriting templates.
Missing new-order, processing, completed, or customer invoice emails freeze fulfillment even when checkout and payments still work. This guide is about WooCommerce transactional mail—not generic WordPress resets or contact-form leads—so you diagnose trigger, template, and delivery layers in that order. Revenue stores that keep losing confirmations should escalate to Request Rescue and plan ongoing store ops on Commerce Systems once mail is stable.
Key facts
Verifiable numbers and definitions — each claim links to its source.
- WooCommerce sends store email through WordPress wp_mail(), so many 'not sending' cases are host mail delivery problems rather than WooCommerce template bugs. (WooCommerce email troubleshooting)
- Orders still in Pending Payment do not trigger WooCommerce order emails until payment succeeds and the order status advances. (WooCommerce email troubleshooting)
- WooCommerce recommends SPF, DKIM, and DMARC on your sending domain; From addresses on public domains like Gmail or Yahoo are likely to be marked spam or blocked. (WooCommerce email authentication)
What the error means
WooCommerce sends store mail through WordPress `wp_mail()` when an order (or related event) hits a status or action that maps to a notification under WooCommerce → Settings → Emails—New order, Processing order, Completed order, Customer invoice, Failed order, and similar. Generation and delivery are separate: the email can be disabled, skipped (empty recipient), never fired because the order stayed Pending, handed to PHP mail/SMTP and rejected, or accepted by the server then spam-foldered for bad SPF/DKIM. Contact-form and core password-reset mail share the same transport but different settings screens; fixing only a form SMTP plugin without checking WooCommerce email toggles and order status leaves shoppers silent after purchase.
Common symptoms
- Customer never receives order confirmation or processing/completed emails after a paid order
- Admin “New order” mail missing while the order appears correctly in WooCommerce → Orders
- WooCommerce → Status → Logs (transactional-emails or mail plugin) shows failed, skipped, or disabled sends
- Resend order email from the order screen does nothing or fails the same way
- Test emails from SMTP plugins succeed but real order notifications do not (or the reverse)
- Messages arrive for Gmail admins but not for customers on Microsoft 365 (or land only in spam)
- Orders stuck in Pending payment never fire the emails expected after Processing
Most likely causes
- 01 Individual WooCommerce email notifications disabled, wrong recipient, or empty To field
- 02 Order status never reaches the trigger (payment/webhook left the order Pending or Failed)
- 03 Host blocks PHP mail() or outbound SMTP; no authenticated SMTP/API sender configured
- 04 From address uses a free Gmail/Yahoo address or a domain not aligned with SPF/DKIM
- 05 Plugin/theme conflict or fatal during email generation (HTML warnings mixed into send)
- 06 Email customizer, multilingual, or PDF-invoice extension breaking the default template hook
- 07 Action Scheduler / WP-Cron delay or failure deferring transactional sends indefinitely
What changed before the problem started
- WooCommerce, email customizer, SMTP, or security plugin was updated
- Host migrated or disabled unauthenticated PHP mail after a spam complaint
- From address, admin email, or DNS SPF/DKIM records were edited
- Payment gateway or webhook change left orders in Pending instead of Processing
- SMTP credentials rotated or transactional provider API key expired
- New caching, firewall, or “disable cron” plugin interfered with scheduled email actions
Troubleshooting steps
- 01
Confirm which notification should have fired for the order status
Open the affected order and note its status (Pending, Processing, Completed, Failed). In WooCommerce → Settings → Emails, verify the matching notification is enabled and lists the correct admin or customer recipient. Disabled or blank-recipient emails never leave the store no matter how healthy SMTP looks.
- 02
Read transactional email logs and order notes before changing SMTP
Check WooCommerce → Status → Logs for transactional-emails (or your mail logger) around the order time, and skim order notes for “email sent/failed” lines. Sent-but-not-received points at spam/DNS; failed/disabled/skipped points at settings or transport; no log entry often means the trigger never ran.
- 03
Send a WooCommerce test email and one controlled resend
From the email settings screen (or a reputable SMTP plugin), send a test to an address you control. From a known good test order, use Resend once—do not spam real customers. Capture whether the log shows success and whether the message hits inbox or spam.
- 04
Wire authenticated SMTP or a transactional API with a domain From address
If PHP mail fails or is unreliable, configure SMTP/API (SendGrid, Mailgun, SES, Postmark, Workspace, Microsoft 365, etc.) with a From address on your store domain. Keep one sender path; competing SMTP plugins often cancel each other.
- 05
Verify SPF/DKIM (and ideally DMARC) for the sending domain
Publish the provider’s SPF include and DKIM keys at DNS, and avoid duplicate conflicting SPF TXT records. Misaligned From addresses are a top reason order mail vanishes for customers while admins still see occasional deliveries.
- 06
Conflict-test only WooCommerce plus the mail plugin if generation fails
Prefer staging. On production, only in a low-traffic window with a backup taken. If logs show fatals during send, leave WooCommerce and the SMTP plugin active on a default theme, then re-enable email customizers and other plugins in batches until the failure returns.
When to stop troubleshooting
Stop DIY SMTP roulette if paid orders keep shipping without customer confirmations, you cannot tell whether mail is failing at trigger vs delivery, the host has suspended outbound mail for abuse, or peak sales need a reliable sender today. Dispatch Request Rescue with order IDs, email log excerpts, and SMTP errors; for ongoing WooCommerce reliability (checkout, payments, and transactional mail), enroll in Commerce Systems so store ops and bundled website Care replace one-off fire drills.
Information to collect before requesting help
- 01 Order ID(s), statuses, and which email types are missing (new order, customer processing, etc.)
- 02 Screenshot of WooCommerce → Settings → Emails for the affected notifications
- 03 Transactional email or SMTP log lines with timestamps (secrets redacted)
- 04 From address in use and whether SPF/DKIM are published for that domain
- 05 Hosting company and any mail-suspension or port-25 notices
- 06 Recent WooCommerce, SMTP, customizer, or DNS changes
- 07 Whether gateway charges match Processing orders or orders stay Pending
How a professional repairs the problem
We prove whether WooCommerce never triggered the notification, handed it off and failed transport, or lost the message to filtering—then enable the right emails, repair order-status/webhook gaps, and put authenticated SMTP/API plus SPF/DKIM in place. We retest admin and customer templates on a controlled order, leave logging on, and—when the store cannot afford another silent fulfillment outage—hand off into Commerce Systems for ongoing store operations with website Care included, or finish with Request Rescue stabilization if you only need the break-glass repair.
Frequently asked questions
Is this the same as WordPress emails not sending? +
Why does the order exist but no email went out? +
Can caching break WooCommerce emails? +
Should I install multiple SMTP plugins? +
Customers say mail is in spam—is that “not sending”? +
When do I need Commerce Systems instead of another plugin tweak? +
Repair dispatch
Still Need Help Fixing Your Website?
If you are not comfortable editing website files, changing server settings, repairing a database, or troubleshooting a live website, professional help may prevent additional damage or downtime. We will review the problem before accepting the repair.
- You will receive a clear explanation of the likely cause.
- We will tell you if the issue falls outside our repair scope.
- No additional work will be performed without approval.
- A backup should be created whenever access and website condition allow it.
Do not share passwords through an unencrypted contact form — use Password Pusher (self-destructing link). Prefer a dedicated Rescue 404 admin account, not your personal owner login; if you cannot create one yet, we will add ours after repair.