SMTP, spam filters, order-status triggers, and WP-Cron—fix the stack in order.
Symptoms vs root causes
| What you see | Likely cause |
|---|---|
| No email for any order | SMTP / hosting mail blocked, or WP-Cron stuck |
| Only some statuses missing | Email type disabled or custom status without a template |
| Customer says “nothing arrived” | Spam folder, wrong address, or provider deferral |
| Admin gets mail, customer does not | Customer template off; admin “New order” still on |
Step 1: Confirm WooCommerce email settings
- Go to WooCommerce → Settings → Emails.
- Open Processing order, Completed order, New order (admin), and any custom templates you use.
- Ensure each needed email is Enabled, recipient fields are correct, and “From” name/address look legitimate.
- Place a test order (or use an order-actions “Resend” if available) after each change.
Custom order statuses often need their own email wiring. Check the notification’s trigger and enabled state after every custom-status change.
Step 2: Replace PHP mail with SMTP
Shared hosts frequently throttle or silently drop mail(). Use an authenticated SMTP plugin or transactional provider.
- Match the From domain to a domain you control.
- Publish SPF, DKIM, and preferably DMARC for that domain.
- Send a test email to Gmail and a corporate inbox; check spam.
Step 3: Logging and conflict checks
- Enable an email log so you can see attempted versus delivered.
- Temporarily disable security or email-verification plugins that intercept checkout.
- Switch to a default theme briefly if a custom checkout template breaks hooks.
- Confirm the customer email on the order is valid.
Step 4: WP-Cron and queues
If emails queue but never leave, WP-Cron may be disabled (DISABLE_WP_CRON) without a system cron replacement, or a heavy site may starve cron. Set a real server cron to hit wp-cron.php, or use an Action Scheduler-aware host setup.
Do not “fix” deliverability with spoofed From addresses
Sending as @gmail.com from your server will fail SPF checks. Use your domain or the provider’s verified sender only.
Related store fixes
After mail works: fix shipping surprises that trigger support mail storms (wrong shipping cost), and keep guest buyers able to view orders (guest order access).
FAQ: WooCommerce emails not sending
- Why did WooCommerce emails suddenly stop?
-
Common triggers include expired SMTP credentials, a security-plugin update, or WP-Cron stopping after a migration.
- Is WooCommerce broken if PHP mail works in a test plugin?
-
Not necessarily—check whether the specific order-status email is enabled and whether a custom status fires that template.
- Do I need a paid email API?
-
Not always. Authenticated SMTP can work at low volume. Transactional APIs scale better and usually improve inbox placement.
- Customers only miss Completed emails
-
Open the Completed order template and confirm it is enabled. Some stores stay on Processing and never flip to Completed—so the template never fires.
Need WooCommerce help beyond this fix?
Custom checkout, shipping, catalog rules, and store architecture—scoped delivery, not endless hourly tickets.
Discussion
0 comments
No comments yet.
Have a technical question, correction or a different interpretation? Add to the discussion.