WooCommerce failed-order email queries are gaining impressions, especially around customer delivery. Custom filters can replace, append, or clear recipients after the email class is enabled, which makes the problem look like SMTP failure.
Use this when admin messages arrive but customers do not, or when an email log shows a generated failed-order message with an unexpected recipient list.
Quick answer
WooCommerce Failed Order Email Recipient Filter Audit should be handled with a narrow evidence-first workflow: create test failure, find recipient hooks, log final recipient, then verify the result before making broader changes.
What to check first
- Create one controlled failed order and record its order ID, status transition, customer email, and test time.
- List custom code and plugins that use WooCommerce email recipient filters or disable email classes.
- Log the recipient value before and after each relevant filter without storing message content.
- Match the final recipient to WooCommerce email logs and the SMTP provider message ID.
- Remove or narrow the offending filter, then retry once and verify no duplicate message.
Diagnostic table
Use this table to keep the work practical. It connects the symptom to evidence and a verification step.
| Action | Evidence to collect | How to verify |
| Create test failure | Create one controlled failed order and record its order ID, status transition, customer email, and test time. | The intended failed-order email class has one valid recipient. |
| Find recipient hooks | List custom code and plugins that use WooCommerce email recipient filters or disable email classes. | WooCommerce and SMTP logs agree on recipient and message time. |
| Log final recipient | Log the recipient value before and after each relevant filter without storing message content. | The test customer receives one message with the correct order details. |
| Narrow the filter | Match the final recipient to WooCommerce email logs and the SMTP provider message ID. | Admin, processing, completed, and refund emails keep their intended recipients. |
Why this usually happens
- A snippet may return an empty recipient for an email class it does not recognize.
- Legacy filter code can assume failed-order messages are admin-only.
- Role, order status, or payment method conditions can exclude the wrong customer.
- SMTP cannot deliver a message that WooCommerce never addressed.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
wp wc order get 10612 --user=1 --fields=id,status,billing.email,payment_method
wp plugin list --status=active --fields=name,version
rg -n 'woocommerce_email_recipient_|woocommerce_email_enabled_' wp-content/
# Redact customer addresses from shared logs.
Safe fix order
Do the work in a sequence that makes each result easy to prove. Stop if a step produces new evidence that changes the incident scope.
- Create test failure
- Find recipient hooks
- Log final recipient
- Narrow the filter
- Retry once
What to tell the client or owner
Report the order ID, email class, filter callback, before and after recipient, SMTP message ID, and single retry result.
Production verification checklist
- The intended failed-order email class has one valid recipient.
- WooCommerce and SMTP logs agree on recipient and message time.
- The test customer receives one message with the correct order details.
- Admin, processing, completed, and refund emails keep their intended recipients.
Mistakes to avoid
- Do not judge the fix by one browser or the homepage only.
- Do not delete evidence before recording usernames, file paths, timestamps, and response headers.
- Do not add a cache, security, or tracking plugin while the original problem is still unclear.
- Do not leave test users, temporary debug logs, or broad API keys active after verification.
When HandL WP should help
Bring in help when this affects leads, checkout, search visibility, malware risk, paid media reporting, or a client production site. HandL WP can trace the issue through WordPress, hosting, cache, tracking, and Search Console, then verify the workflow after the technical fix.
If this is active on a production site, trace WooCommerce email delivery failures.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references
Preserve the final recipient before retrying
When a filter may change the address, use the WooCommerce failed-order recipient snapshot to record the redacted final recipient, email class, order transition, mail result, and provider message ID before one controlled retry.