Descripción
WooCommerce emails not sending, or going to spam? Find out why, and fix it.
Email Health Check looks at how your WordPress or WooCommerce site sends email and tells you what is wrong in plain language: SPF, DKIM and DMARC problems, mail sent through plain PHP mail, a blacklisted server IP, order emails that are switched off or stuck behind unpaid orders, and more. It also keeps an email log of what your site sends. It is free, needs no account, and sends no email content or personal data to any service. The only outside lookup is a server IP blacklist check that runs only when your site sends mail directly from your server (see External services).
What it does not do
- It is not an SMTP plugin and does not send your email for you. It works next to whichever plugin or mail service you already use.
- No account, no upsell banners or nags, no tracking and no analytics. It makes no HTTP requests of its own and sends nothing to the plugin’s authors; the only outside lookups are the DNS queries described under External services. The only prompt it ever shows is one dismissible request for a review, on its own screens, to administrators only.
- One plain text link, no more: there is one small link, “Follow the Pro plan”, to a waiting list page for a possible future Pro version (in the footer of its own screen and on its row in the Plugins list). The plugin never requests anything for it and sends nothing; it can be hidden with the
ecehc_show_pro_linkfilter. Nothing in this free plugin is removed or locked. - Nothing bundled: no third-party libraries, fonts or scripts, only the plugin’s own code.
What data it touches
- The checks read your site’s own settings and look up the public DNS records of your sending domain through your server’s own DNS resolver. The one lookup that involves your server is the IP blacklist check, which runs only when your site sends mail directly from your server (see External services).
- The email log keeps the time, source, status, WooCommerce email type, the recipient’s domain, a partly hidden address such as j***@example.com and an error message with addresses hidden. Never the subject or the message. It is kept for 7 days by default (choose 1, 3 or 7), can be turned off or cleared, and is removed when you uninstall the plugin.
- A test email goes only to the address you type (or the site admin address if you leave it blank).
- Nothing is sent to the plugin’s authors.
Diagnose
- Email Health Report: one page with a Pass, Warning or Fail status for each check. The page opens at once and the checks (including the DNS lookups) run in the background, so slow DNS never holds it up.
- Getting-started checklist: a short checklist for new installs (send a test email, fix the top failing check, look at the Email Log) that ticks itself off and can be hidden.
- “Fix this first” summary: the top of the report names the one check to fix first (failures before warnings, never a “Not checked” result) with a plain-language next step and a link to its “How to fix this” panel. When every check passes it says so. When the report loads in the background, the summary is also announced to screen readers.
- Sending test: send a test email to your own address or to any inbox you want to try (for example Gmail or Outlook), with an optional subject. The result shows right away, with the error if it failed.
- Copy support report: a plain-text summary of your setup (versions, domains, check results, the detected mail provider, recent email counts and, if the blacklist check ran, your server IP address) to paste into a support ticket, with no passwords, message contents or full email addresses. Review it before posting it publicly.
- SMTP / mail service: warns when mail goes out through plain PHP mail, and names the plugin that handles your outgoing email when it finds one.
- Sender address, SPF, DKIM and DMARC: checked for the domain you actually send from, since that is what receivers verify.
- Server IP blacklists: when you send straight from your server (no SMTP service), your IP is looked up on the free DroneBL and PSBL lists.
- WooCommerce email setup: flags turned-off key emails, a missing new-order recipient, an invalid From address and outdated theme overrides of WooCommerce email templates. It only reads your settings.
- “WooCommerce emails not arriving?” panel (WooCommerce): combines the results below and the last 7 days of the Email Log into the most likely cause and one next step: a broken WooCommerce email setting, recent failed WooCommerce emails, turned-off emails, unpaid orders, no mail service, a From address problem, missing DNS records or a blacklisted server. It says “most likely” because the checks cannot see inside a mailbox. It makes no requests of its own and stores nothing.
- Unpaid orders (WooCommerce): warns when many orders are stuck in “Pending payment” or “Failed”. WooCommerce sends no order emails for those, so the real problem may be your payment gateway. Only order counts are read.
Email log and failure alerts
- Email Log and statistics: every email your site sends (WooCommerce, other plugins and WordPress itself) with its source, WooCommerce email type, status and error. Filter by source, status and WooCommerce email type, and see accepted and failed counts for the last 24 hours and 7 days. Only a partly hidden recipient address is stored, never the message. You can shorten the retention, turn logging off or clear the log.
- Failure alerts in wp-admin: an “Email Health” dashboard widget and a Site Health test warn you when many emails fail, without needing email to work.
- Site Health integration: the same checks appear under Tools > Site Health.
Fix
- “How to fix this” panels: failing SPF, DKIM and DMARC checks show a copy-paste DNS record where your provider documents one, and a link to the provider’s official setup guide.
WP-CLI
wp ehc checkruns all checks (add--format=jsonfor scripts). It exits with status 1 when any check fails. The server IP blacklist check needs a web request, so from the command line it is skipped unless you set the IP with theecehc_server_ipfilter.wp ehc loglists recent logged emails (--source,--status,--type,--limit), andwp ehc log --statsshows accepted and failed counts for the last 24 hours and 7 days.
For developers
- The
ecehc_checks_completedaction fires after every run of the checks, with the results of each check. Together with theecehc_email_loggedaction and theecehc_checksfilter and others, the hooks and theecehc_run_checks()function are documented with a stability promise indocs/extending.mdin the plugin’s GitHub repository.
Works with
The plugin identifies the provider from the settings of WP Mail SMTP, FluentSMTP and Post SMTP, and gives setup guidance for SendGrid, Mailgun, Brevo, Postmark, Amazon SES, SparkPost, Mailjet, Elastic Email, Google Workspace and Microsoft 365. It also works with any other SMTP plugin, or with none.
WooCommerce is a trademark of Automattic Inc. This plugin is independent and is not affiliated with or endorsed by WooCommerce or Automattic.
External services
The “Server IP Blacklists” check sends DNS queries to the public blacklists DroneBL and PSBL. This happens only when your site does not send email through an SMTP plugin or mail service, and only when you open the plugin’s report or Tools > Site Health. The answer is saved for about 12 hours (about 1 hour after a failed lookup; the Re-check button and a changed IP address also trigger a new lookup). The queries go through your server’s own DNS resolver.
- What is sent: a DNS query for your web server’s public IPv4 address (written in reverse, for example
4.3.2.1.dnsbl.dronebl.org). The lists’ operators can see that address and the address of your DNS resolver. No other data is sent. - DroneBL: https://dronebl.org/ (terms: https://dronebl.org/docs/howtouse)
- PSBL: https://psbl.org/ (usage: https://psbl.org/howto)
Spamhaus is intentionally not queried, because its free service is limited to low-volume non-commercial use. Developers can change the lists with the ecehc_dnsbl_zones filter.
Pro waiting list link (outboxhealth.com). The plugin shows one plain text link, “Follow the Pro plan”, to https://outboxhealth.com/waitlist/ in the footer of its own screen and on its row in the Plugins list. The plugin makes no request to that site and sends it no data. outboxhealth.com receives a visit only if you click the link, and is covered by its own privacy policy: https://outboxhealth.com/privacy/. To hide the link, return false from the ecehc_show_pro_link filter.
Capturas






Instalación
Via WordPress Dashboard
- Go to
Plugins > Add Newin your WordPress dashboard. - Search for “Email Health Check”.
- Click “Install Now” and then “Activate”.
Manual Installation
- Download the plugin from the WordPress.org Plugin Repository.
- Unzip the file and upload the
ecom-email-health-checkfolder to your/wp-content/plugins/directory. - Activate the plugin through the ‘Plugins’ menu in WordPress.
Preguntas frecuentes
-
Why are my WooCommerce emails not sending, or going to spam?
-
The usual causes, all of which the Health Report checks:
- the site sends through plain PHP mail instead of an SMTP service;
- the SPF, DKIM or DMARC records for your From address are missing or wrong;
- the From address does not match your domain;
- the server’s IP address is on a blacklist;
- the WooCommerce email is switched off or has no recipient;
- the order is stuck in “Pending payment”, which sends no order email.
For SPF, DKIM and DMARC the report shows how to fix it for common mail providers. The Email Log then shows whether your emails are being accepted or failing.
-
What problem does this plugin solve?
-
Many hosting providers have poor email delivery configurations that can silently fail, leaving you and your customers in the dark. This plugin diagnoses those issues so you can address them.
-
What does the plugin check?
-
It checks for common issues like email sending failures, mail sent through plain PHP mail instead of SMTP, sender address misconfigurations, missing or incomplete SPF, DKIM and DMARC records, and (for WooCommerce stores) many orders stuck in “Pending payment”.
-
Do I need an SMTP plugin?
-
Not to use this plugin. But if the report warns that your site sends through plain PHP mail, an SMTP plugin or a transactional email service is the usual fix, because authenticated email is far less likely to land in spam.
-
What does “Not checked” mean?
-
The plugin could not reach a conclusion, so it does not call it a failure. The most common case is DKIM: the key can only be found under a few common selector names, and many providers use their own. Check your provider’s DNS instructions, or an online DKIM checker, to be sure.
-
Why does the log say “Accepted” and not “Delivered”?
-
WordPress can only tell that your mail system took the email without an error. Whether it reached the inbox depends on the receiving server, which this plugin cannot see.
-
Does it work without WooCommerce?
-
Yes. The report, the email log and the alerts work on any WordPress site. The WooCommerce-specific parts (email types and the unpaid orders check) appear only when WooCommerce is active.
-
How do I send a test WooCommerce email?
-
Recent versions of WooCommerce have this built in: go to WooCommerce > Settings > Emails, pick an email and use its preview to send yourself a test copy. It uses your real From address and mail setup, and the Health Report has a button that opens that screen. While the email log is on, the test appears in the Email Log tab as a WooCommerce email.
-
How does the plugin detect my SMTP plugin?
-
It briefly runs the mail-configuration hooks (
phpmailer_init) that other plugins register, on a temporary object that never sends anything, to see which ones switch WordPress to SMTP. This stays on your site: no data is sent to any external service. The result is saved for up to 12 hours, and the “Re-check” button refreshes it. -
Does the plugin store personal data?
-
The Email Log keeps, for a few days (7 by default), the time of each email, which plugin sent it, its WooCommerce email type, whether it was accepted or failed, the recipient’s email domain and a partly hidden address such as j***@example.com, and an error message with any addresses hidden. It never stores the message, its subject or a full email address. You can turn logging off, shorten the retention or clear the log in the Email Log tab. A suggestion for your privacy policy is added under Settings > Privacy.
-
Does the email log slow down my site?
-
Each email causes one small database insert. Entries are pruned daily and the log is capped, so it stays small.
-
Can I help translate the plugin?
-
Yes, and thank you. Translations are done by the community on translate.wordpress.org: https://translate.wordpress.org/projects/wp-plugins/ecom-email-health-check/ . The plugin’s texts can be translated, except the plain-text support report and the WP-CLI output, which stay in English on purpose. A draft Arabic translation is kept in the plugin’s GitHub repository; it still needs a native speaker to review it and a translation editor to import it.
-
Where do I get support?
-
Please use the plugin’s support forum on WordPress.org: https://wordpress.org/support/plugin/ecom-email-health-check/
Colaboradores y desarrolladores
“Email Health Check & Log for WooCommerce – SPF, DKIM, DMARC & Alerts” es un software de código abierto. Las siguientes personas han colaborado con este plugin.
ColaboradoresTraduce “Email Health Check & Log for WooCommerce – SPF, DKIM, DMARC & Alerts” a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN , o suscríbete al log de desarrollo por RSS .
Registro de cambios
1.8.0
- New: one plain text link, “Follow the Pro plan”, to the Pro waiting list in the footer of the plugin’s own screen and on its row in the Plugins list. It is a link only: the plugin makes no request and sends nothing, and nothing in the free plugin changes or is locked. A Pro version is only being planned. Developers can hide the link with the
ecehc_show_pro_linkfilter (documented in the hooks guide). - No new settings, no new requests and no data leaves your site.
1.7.0
- New: developers can run the full set of checks from code with
ecehc_run_checks(), for example from a scheduled job. The function is documented in the hooks guide (docs/extending.md in the GitHub repository). It sends nothing and stores no results; some lookups are cached for up to 12 hours. - No change in what the plugin does for site owners.
1.6.0
- New: a “Fix this first” summary at the top of the Health Report names the most important problem and links to its fix. When the report loads in the background, the summary is also announced to screen readers.
- New: when WooCommerce is active, a “WooCommerce emails not arriving?” panel names the most likely cause and one next step. It uses the checks and the 7-day email log statistics the plugin already has; it makes no new requests and stores nothing new.
- New: developers get an
ecehc_checks_completedaction after every full check run, and a short guide to the plugin’s hooks (docs/extending.md in the GitHub repository).
1.5.1
- Improved: the description says plainly what the plugin does not do (it is not an SMTP plugin, has no upsell banners, no tracking and nothing bundled) and what data it touches.
- Improved: new screenshots that match the current screens.
- No change in how the plugin works.
1.5.0
- New: the Health Report loads in the background, so the page opens at once while the DNS checks run. Without JavaScript, or if the request fails, it falls back to loading in the page, and a retry link appears.
- New: send the test email to any address, with an optional subject. The address is shown partly hidden in notices, and test emails are limited to 5 every 5 minutes.
- New: translation-ready, with a template (.pot) and an Arabic draft translation.
- Changed: the plugin is now named “Email Health Check & Log for WooCommerce” and its tags, description and FAQ are rewritten to describe it better. The plugin folder, settings and data are unchanged.
- Improved: tested with WooCommerce 11.2 and WordPress 7.1.
- Improved: the support report describes exactly what it contains.
- Improved: a sixth screenshot, a new banner and a refreshed readme.
- Developer: dependency-free unit tests (
php tests/run.php), Plugin Check and lint in continuous integration, and a more resilient deploy workflow.
1.4.0
- Fix: the “SMTP / Mail Service” check always passed since 1.3.0, because it counted the email log’s own mail hook as a mail service. It now warns again when your site uses plain PHP mail, and the server IP blacklist check is no longer skipped by mistake.
- New: “WooCommerce Email Setup” check. Flags turned-off key emails (new order, processing, completed), a missing new-order recipient, an invalid From address and outdated theme overrides of WooCommerce email templates. It only reads your settings.
- New: “Copy support report” button with a preview: a plain-text summary of your setup to paste into a support ticket, with no passwords, message contents or full email addresses.
- New: getting-started checklist for newly activated sites (send a test email, fix the top failing check, look at the Email Log). It ticks itself off and can be hidden.
- New: WP-CLI commands
wp ehc check(exits with status 1 when a check fails) andwp ehc log(with--stats). - New: a link from the Health Report to WooCommerce’s own email preview and “send a test email”.
- New: a single, dismissible request for a WordPress.org review, shown only on this plugin’s screens (“Maybe later” works at most twice).
- New: declares compatibility with WooCommerce High-Performance Order Storage and the Cart and Checkout blocks, and adds the WooCommerce version headers.
- Improved: readme with a clearer description, FAQ and screenshots.
1.3.0
- New: “Email Log” tab. Records every email your site sends (WooCommerce, other plugins and WordPress itself) with its source, WooCommerce email type, status (accepted or failed) and error, and lets you filter by source, status and WooCommerce email type. Needs WordPress 5.9+. It stores a partly hidden recipient address and never the message, subject or full address, in a new table
{prefix}ecehc_email_log. - New: email statistics for the last 24 hours and 7 days: accepted and failed counts, failure rate, a breakdown by source and by WooCommerce email type, and the last failure.
- New: log settings in the Email Log tab: turn logging off, keep entries for 1, 3 or 7 days (7 by default), or clear the log.
- New: failure alerts inside wp-admin: an “Email Health” dashboard widget and a “Recent email failures” Site Health test, with no email needed. Thresholds can be changed with the
ecehc_alert_min_failuresandecehc_alert_min_ratefilters. - New: “Server IP Blacklists” check. When your site sends mail directly (no SMTP plugin or mail service), it looks your server’s IP up on the free DroneBL and PSBL blacklists. See “External services” for exactly what is sent.
- Dev: new hooks
ecehc_enable_email_log,ecehc_log_row,ecehc_email_logged,ecehc_log_retention_days,ecehc_log_max_rows,ecehc_dnsbl_zonesandecehc_server_ip.
1.2.0
- New: “SMTP / Mail Service” check. Warns when your site seems to send email through plain PHP mail, and names the plugin that handles your outgoing email. The detection result is saved for up to 12 hours; use the new “Re-check” button to refresh it.
- New: the email checks appear as a test on Tools > Site Health.
- New: failing SPF, DKIM and DMARC checks show a “How to fix this” panel with a copy-paste record where one is documented, and a link to your mail provider’s official setup guide (Mailgun, Mailjet, Elastic Email, Google, Microsoft 365, SendGrid, Brevo, Postmark, Amazon SES, SparkPost).
- New: “Unpaid Orders” check for WooCommerce stores. Warns when many recent orders are stuck in “Pending payment” or “Failed”, since WooCommerce sends no order emails for those. Only order counts are read.
- Change: SPF, DKIM and DMARC are now checked for the domain of your From address instead of always the site domain. The report says which domain was checked.
- Change: “Sender Address Check” shows a warning, not a failure, when the From domain differs from the site domain, and a failure when it is a public mailbox such as gmail.com.
- Fix: no more “your SPF record does not include X” warning for providers that don’t use a root-domain include (Postmark, SendGrid, Brevo, Amazon SES, SparkPost).
- Fix: a domain with no TXT records is reported as “No SPF record” instead of “DNS lookup failed”.
1.1.1
- New: DKIM check (tries common selectors; shows “Not checked” if your provider uses a custom one).
- New: DMARC check, with a note when the policy is “none”.
- New: SPF check detects your SMTP service (WP Mail SMTP, Post SMTP, FluentSMTP) and warns if it is missing from your SPF record.
- New: “Warning” and “Not checked” statuses, so uncertain results are no longer reported as failures.
- Fix: DNS names that don’t exist are treated as “no record” instead of “DNS unavailable”.
- Removed: links and call-to-action boxes pointing to a discontinued website.
1.1.0
- Fix: the report no longer sends emails to test@example.com on every page view; “Basic Email Functionality” now reflects your last test email, with the send time and any mail error.
- Fix: “Sender Address Check” now uses the effective From address (WooCommerce setting and
wp_mail_fromfilter) instead of the admin email. - Fix: SPF check shows “Not checked” when DNS lookups are unavailable instead of a false failure; flags multiple SPF records and records that authorize no sender.
- Fix: only a leading “www.” is stripped when detecting the site domain.
- Fix: the “Health Check” link on the Plugins page now opens the dashboard.
- Fix: activation redirect no longer interrupts bulk activation.
- Fix: escaped remaining admin output and moved inline styles to the stylesheet; stylesheet is versioned with the plugin version.
- Dev: restructured into namespaced classes with one class per check; added the
ecehc_checksfilter. Requires PHP 7.4+.
1.0.2
- UI Enhancements
1.0.1
- Test plugin deployment automation.
1.0.0
- Initial release.
