Free on WordPress.org Tested up to WordPress 7.1

Disposable Email Guard

Stop fake sign-ups, fraudulent checkouts and welcome-coupon abuse on WordPress and WooCommerce. It catches throwaway addresses from Mailinator, 10minutemail, Guerrilla Mail and similar services in registrations, checkouts, comments and forms, with every check on your own server.

Requires WordPress 6.2+ and PHP 7.4+. WooCommerce optional.

GDPR-friendly
Works offline
WooCommerce ready
Free and GPL, no account
Illustration with sample data

Why Disposable Email Guard

GDPR-friendly by design

Every check runs on your own server, so visitor emails never leave your site and there is no third-party processor and no DPA to sign with us. Blocked attempts are kept in a local log, so mention it in your privacy policy.

Offline by default

Five domain lists ship as snapshots inside the plugin. It makes no outbound connections unless you turn on auto-update or click Update now. Each plugin release brings fresh snapshots.

You choose how strict

Start in Flag mode, the default: matches get through but are tagged for review. Switch to Block to refuse them, or to Log only to watch quietly before you change anything.

Built for WooCommerce

Checks the checkout (classic and block-based), customer accounts, product reviews and coupon redemption, which stops the “new burner email, same welcome coupon” trick.

Everything you need to stop fake sign-ups

Six core protections for real WordPress and WooCommerce sites, and the smaller tools listed under them. Every one is in the free download; there is no Pro tier.

Bundled domain lists

Two well-known lists are on by default: about 13,000 disposable domains, Mailinator, YOPmail, Guerrilla Mail, 10minutemail and Temp-Mail among them. Switch on three more bundled lists for about 98,000 domains in all. Subdomains such as anything.mailinator.com match too.

Flag, Block or just Log

Flag, the default, lets sign-ups through and tags them for review. Block refuses them with a clear message. Log only records what would have matched, for a dry run. The setup wizard that opens on activation helps you choose.

WordPress core forms

Six checks, each with its own switch: registration, profile email change, comments (off by default), lost password, multisite signup and programmatic user creation through the REST API, WP-CLI or other plugins. Logging in is never checked.

WooCommerce checkout and coupons

Checks the billing email at checkout, customer registration, the My Account email change and product reviews. The block-based checkout is validated server-side on the Store API with the same rules as the classic one, and HPOS is supported. The coupon-abuse blocker, on by default, refuses a coupon when the billing email is on a blocklist, so a fresh throwaway address cannot redeem the same welcome coupon again.

Detection log, dashboard and digest

Every match is logged with the email, domain, reason, IP address and where it happened; filter it and export the rows to CSV. Rows older than 90 days are purged by default (7 to 365). The dashboard shows a 14-day chart, reasons and top domains, with a widget on the main WordPress dashboard, and a summary email goes out weekly by default when there was activity (daily, or off).

Works with your forms

Contact Form 7 and Gravity Forms are built in, with nothing to configure. WPForms, Elementor Forms, Forminator, Fluent Forms and any other form plugin can call the wpcdeg_check filter from their email-validation hook.

Also included

  • Auto-hold flagged orders. Optional, off by default: an order placed with a flagged email is set to On hold, so it waits for a manual review before fulfilment.
  • Flagged orders in the admin. An order note, a notice in the billing panel and a Flagged filter above the Orders list (classic and HPOS).
  • Anonymous mail. Optional, off by default: detect Proton Mail, Tutanota, SimpleLogin, Apple Hide My Email, Firefox Relay, DuckDuckGo Email Protection and other privacy services.
  • Dead-domain check. Optional, off by default: catches domains with no mail server (expired, parked or mistyped), cached for 24 hours. It sends one DNS query for the domain part only, and lets the email through if the lookup fails.
  • Plus-aliases. Optional, off by default: detect user+tag@example.com style sub-addresses.
  • Your own block and allow lists. Addresses or wildcard rules such as *@example.com, *@*.ru or spam*@*, bulk-imported from CSV or TXT. The allowlist always wins.
  • Extra-strict mode. Optional, off by default: filters WordPress’s is_email() so disposable addresses are caught wherever it is used.
  • Your own error messages. A separate message for each reason a visitor is refused.
  • Settings export and import as JSON, for moving a configuration between sites.
  • WP-CLI commands: refresh, test, stats, log, sources and clear-log.

How it compares

Store owners and bloggers usually handle disposable emails in one of three other ways: a paid validation API, a small free WordPress plugin, or the email check built into a form builder. Here is how each one stacks up.

Disposable Email Guard

Self-hosted, free, GPL

The whole engine ships in the plugin. Five domain lists load from disk, the lookup runs in your PHP process, and the WooCommerce protections (coupon refusal, auto-hold) are built in. Refreshing the lists from upstream is optional.

Advantages

  • $0 per check, $0 per year, whether you get 100 sign-ups or 100,000.
  • No third-party processor, so no DPA with us. The local detection log belongs in your privacy policy.
  • Works offline: about 13,000 domains out of the box, about 98,000 with all five bundled lists.
  • Flag, Block and Log modes, coupon-abuse blocker, auto-hold, dashboard, digest and CSV export.

Paid validation APIs

ZeroBounce, Verifalia, NeverBounce, Kickbox and similar

Cloud services that charge per email check. You buy an API key, add it to a WordPress connector, and every sign-up triggers an outbound call.

Drawbacks

  • Typically fractions of a cent per check, so the bill grows with every sign-up.
  • Every visitor email goes to a third party, which usually means a DPA and a privacy-policy update.
  • Stops working if your site cannot reach the API, or when your credit runs out.
  • No WooCommerce coupon-abuse logic, no flag-for-review mode, no detection log on your own site.

Free single-purpose plugins

“Block Temporary Email”-style plugins

Small free plugins with a hard-coded list. Cheap to install, easy to outgrow.

Drawbacks

  • A short hard-coded list, often a few hundred domains, not always kept current.
  • New entries arrive only with a plugin update.
  • Usually checks only the WordPress registration form: no WooCommerce checkout, accounts, reviews or coupons.
  • No dashboard, no log, no flag or log mode, no digest, no wildcards.

Form-builder built-ins

Forminator, Fluent Forms, Gravity Forms add-ons

Some form builders include an email-validation option per form, wired to a paid API or a small built-in list.

Drawbacks

  • Protects only the forms inside that one plugin, not WordPress registration, profile, comments or WooCommerce checkout.
  • Configured form by form: no central list, no site-wide policy, no shared log.
  • If the backend is a paid API, the per-check cost adds up the same way.
  • No coupon-abuse blocking and no flagged-order workflow.
Key differences
Feature Disposable Email Guard Paid validation APIsZeroBounce, Verifalia, Kickbox Free single-purpose pluginse.g. “Block Temporary Email” Form-builder built-insForminator, Fluent Forms
Visitor emails leave your site Never Yes, every check Never Sometimes, depends on the backend
Cost per email check $0 Typically fractions of a cent $0 $0 or the API’s price
Domains out of the box About 13,000; about 98,000 with all five lists Provider-managed A short hard-coded list A few hundred to none
List updates With each release; auto-update is opt-in Provider handles it Plugin update only Plugin update only
WooCommerce checkout (classic, blocks, HPOS) Yes, all three Via a custom hook No No
Coupon-abuse blocker Yes, refuses coupons for blocklisted emails No No No
Flag for review instead of blocking Yes, the default mode No No No
Detection log with filters and CSV export Yes In their dashboard No No
Full comparison (13 more rows)
Full comparison, remaining rows
Feature Disposable Email Guard Paid validation APIsZeroBounce, Verifalia, Kickbox Free single-purpose pluginse.g. “Block Temporary Email” Form-builder built-insForminator, Fluent Forms
Privacy and cost
Data-processing agreement No DPA with us; mention the local log in your privacy policy DPA and privacy-policy update No Only if wired to a paid API
Works on private, staging or firewalled sites Yes, runs locally Needs outbound API access Yes Only with a bundled list
Detection coverage
Anonymous mail (Proton, Tuta, SimpleLogin) Optional toggle Varies by provider No No
Plus-aliases (you+tag@gmail.com) Optional toggle Varies by provider No No
Dead-domain check Optional, cached 24 hours; one DNS query for the domain only Usually included No No
Custom wildcard rules (*@*.ru, spam*@*) Full wildcard syntax Usually whole domains only Usually whole domains only Usually whole domains only
WordPress and WooCommerce coverage
WordPress core forms Six checks, each with its own switch Only via custom code Usually registration only Their own forms only
Set flagged orders to On hold Optional No No No
“Flagged” filter on the Orders list Classic and HPOS No No No
Workflow and visibility
Log-only mode for a safe roll-out Yes No No No
WordPress dashboard widget and 14-day chart Yes No No No
Email digest Weekly or daily Varies by provider No No
WP-CLI commands Yes No No No

Third-party pricing and features vary by provider and plan; check each provider’s current terms. Shown for comparison only. Trademarks belong to their owners.

Download free on WordPress.org (opens in a new tab)

Requires WordPress 6.2+ and PHP 7.4+. Tested up to WordPress 7.1. WooCommerce optional.

Frequently asked questions

Privacy, GDPR and performance

Yes. Every check runs on your own server against domain lists stored inside the plugin, so no visitor email ever leaves your site. There is no third-party processor, so there is no DPA to sign with us or with anyone else.

Blocked and flagged attempts (email, domain, reason and IP address) are kept in a local detection log for your review: 90 days by default, configurable from 7 to 365 days, exportable as CSV. Mention that log in your privacy policy. Similar considerations apply under other privacy laws; check your own obligations.

Never. Validation is a local lookup against the lists that ship inside the plugin. The optional dead-domain check sends one DNS query for the domain part only, never the address. Paid services such as ZeroBounce or Verifalia, by comparison, send every checked address to their cloud and bill you per check.

Not in its default configuration. By default the plugin makes no outbound connections: the five lists are bundled snapshots loaded from disk. Only if you opt into auto-update, or click Update now, does it download the public list files from GitHub. Those requests carry no email addresses, no user data and not your site URL.

Every plugin release bundles refreshed snapshots, so updating the plugin updates the lists. Auto-update is off by default; if you enable it, it runs daily at a quiet hour (03:00 by default) and can be set to hourly, twice-daily or weekly instead.

Nothing breaks. The bundled lists keep working, and a failed refresh never disables protection: the plugin keeps the previous successful copy until the next attempt succeeds.

About 13,000. Two well-known lists are switched on by default and load from snapshots inside the plugin, so they are detected from the moment you activate the plugin. For stricter coverage, switch on three more bundled lists on the Lists & Sources tab: about 98,000 domains with all five.

No. Each check is a single lookup in an in-memory map that is loaded once per request and cached for an hour, rather than a database query or a call to an external service. That stays instant even with all five lists switched on.

Only the first sign-up from a new domain waits for one DNS lookup. The result is cached for 24 hours (1 hour after a failed lookup), so most sign-ups hit the cache. The check is optional and off by default, and if your DNS resolver is down it lets the email through rather than blocking it.

Choosing how strict to be

Flag lets the sign-up through but tags it so you can review it. Block stops it immediately and shows the visitor an error message. Log only records every match without changing anything. The default mode is Flag: matches are let through and tagged until you switch to Block in the setup wizard or in Settings.

Flagged users are marked on their profile. Flagged comments are tagged, and flagged orders get an order note, a notice in the billing panel and a Flagged filter above the Orders list.

Yes. Set the mode to Log only. The plugin records every match in the dashboard and the detection log without rejecting or tagging anyone. After a few days you will know what would have been caught, and you can switch to Flag or Block with confidence.

No. Logging in is never checked; the plugin validates only new submissions such as registrations, checkouts, comments, profile email changes and the forms you enable. Existing accounts keep working even if their email provider later appears on a blocklist, and a password reset by username is always allowed. If long-standing members use a provider you now block, add that domain to the allowlist.

No, never. It only blocks new submissions or flags them for your review. Removing a user, order or comment is always a manual action in the normal WordPress and WooCommerce screens.

Only if you choose to. Anonymous email services such as Proton and Tutanota are off by default, so their users are not affected unless you turn the option on. Even then, you can add specific addresses or domains to your allowlist.

Add specific addresses (spammer@example.com) or simple wildcards: *@example.com matches every address at that domain, *@*.ru every .ru domain, and spam*@* any address whose name starts with “spam”. The allowlist always wins, so you can make exceptions to your own rules.

WooCommerce

It checks the email everywhere WooCommerce takes one: customer registration, checkout (the billing email), the My Account page when a customer changes their email, and product reviews. The block-based checkout is validated server-side on the Store API with the same rules, messages and logging as the classic checkout.

It refuses to apply a coupon when the billing email at checkout is on a blocklist, even if your overall mode is Flag or Log. That stops the common pattern of grabbing a fresh throwaway email to redeem the same first-time-customer coupon again. It is on by default, works on both the classic and the block-based checkout, and can be turned off with one switch.

It is off by default. When you turn it on, any order placed with a flagged email is set to On hold the moment it is created. That stops automatic fulfilment and gives you a chance to review the order before it ships, which suits stores that do not want to hard-block customers at checkout but still want a safety net.

Flagged orders get an order note and a notice in the billing panel, and you can list them with the Flagged filter above the Orders list (classic and HPOS).

Yes. It works with both the classic WooCommerce order storage and High-Performance Order Storage (HPOS), and with both the classic and the block-based checkout. There is nothing to configure.

Forms and developers

Yes, both are built in with nothing to configure. Emails submitted through those forms are checked the same way as registrations and checkouts, and your chosen mode (Flag, Block or Log) applies to them too.

They work too, with a few lines of PHP. Call the wpcdeg_check filter from your form plugin’s email-validation hook:

$result = apply_filters( 'wpcdeg_check', null, $email );
if ( is_array( $result ) && ! empty( $result['blocked'] ) ) {
    // $result['reason'], $result['domain'], $result['message']
}

Yes. The wpcdeg_validate_email filter receives every decision with the email and the context it came from, so you can override it for your own rules. There are WP-CLI commands for operations (refresh, test, stats, log, sources, clear-log), and settings can be exported and imported as JSON. The plugin’s Help tab and its readme on WordPress.org have the details.

Yes. An optional setting filters WordPress’s global is_email() function, so disposable addresses are caught everywhere that function is used, including places other plugins add later. It is off by default because it can be too strict for some setups.

Cost and licensing

Yes. No Pro version, no paid upgrade, no feature behind a paywall and no account. Every feature on this page is in the free download, and the plugin is open source under the GPL, the same license as WordPress itself.

Paid services such as ZeroBounce, Verifalia, NeverBounce or Kickbox charge for every email they check, typically fractions of a cent each, so the cost grows with your sign-ups. Every visitor email is also sent to a third party, which usually means a data-processing agreement and a privacy-policy update. Disposable Email Guard does the disposable-email part of that job on your own server, for free.

Small free plugins usually ship a short hard-coded list that changes only when the plugin is updated, and check only the registration form. Disposable Email Guard bundles five lists (two on by default, about 13,000 domains), adds wildcards and custom rules, Flag and Log modes, a coupon-abuse blocker, auto-hold for flagged WooCommerce orders, a dashboard, a digest and a detection log with CSV export, and can refresh its lists from upstream if you opt in.

Pairs well with Email Verify

Free on WordPress.org

Disposable Email Guard keeps throwaway domains out. WPCoreTools Email Verify covers the other half: new customers get one email with a link, click it, and are confirmed, so you know the address is real and theirs. No codes, no popups, no outside service. With both active, this plugin’s More tools tab shows that you have layered protection.

See Email Verify

Stop fake sign-ups today

Free WordPress plugin, no account needed. Install it from WordPress.org, run the setup wizard, and throwaway emails are flagged or blocked across registrations, checkouts and forms (and comments, if you switch that check on).