Spam Protection

Customer Email Verification Pro includes several independent layers of spam protection that run before the OTP is sent — disposable email blocking (with optional AI pattern matching), MX record validation, a B2B allowlist, a custom blocked-emails list, AI risk scoring, and bot-cluster detection. Each layer is a separate toggle, so you can enable only the ones you need — all seven are off by default.

Enabling the spam protection layers — 88 second walkthrough.

How to Block Disposable / Temporary Emails?

The plugin ships with a built-in list of ~430 known disposable email domains (Mailinator, 10MinuteMail, GuerrillaMail, etc.), current as of this version. When this rule is on, sign-ups from any of those domains are rejected before an OTP is sent.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle Block disposable / temporary emails.
  • (Optional) Add extra domains to Additional blocked domains — one per line.
  • (Optional) Add domains to Excluded domains to whitelist them even if they’re on the built-in list.
  • Customize the rejection message shown to users.
  • Click Save.
Note
The blocklist is checked at signup, classic checkout, Blocks checkout, and edit-account email change.

How to Catch Unknown Disposable Domains (AI Pattern Match)?

New temp-mail services appear faster than any static list can keep up with. The AI pattern match option sits inside the disposable block and inspects the shape of the domain instead of looking it up, so brand-new throwaway domains that aren’t on any list yet are still rejected — for example tempmail-new.xyztrashbox24.info, or temp-box.io.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Make sure Block disposable / temporary emails is ON — the pattern matcher lives inside that block.
  • Enable the toggle Also catch unknown disposable domains (AI pattern match).
  • Click Save.

The pattern matcher uses the same Disposable rejection message as the built-in list, so there is nothing extra to configure. Mainstream mailbox providers (Gmail, Outlook, Yahoo, iCloud, Proton, Zoho, and similar) are never flagged, and anything in your Excluded domains list always wins.

If a legitimate domain is ever caught by the pattern matcher, add it to Excluded domains (always allowed) in the same section — that list overrides every disposable rule.
Note
Pattern-matched blocks are recorded separately from exact-list blocks, so the Analytics dashboard lets you see how much the heuristic is catching on its own.

How to Validate MX Records?

The MX check confirms the email’s domain has a working mail server. This catches typos like @gmial.com, fake domains like @example.test, and dead inboxes — before sending an OTP that would never be delivered.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle Validate email domain (MX check).
  • Customize the MX rejection message if needed.
  • Click Save.
Note
Results are cached per domain for 24 hours to avoid repeat DNS lookups for repeat sign-ups. The check fails open on DNS errors so transient issues don’t block legitimate users.
The Excluded Domains list (above) does not apply to this check — there is currently no per-domain exemption for MX validation. If a real business domain is being rejected, first confirm its DNS actually has an MX record; if it genuinely doesn’t, the only recovery today is turning this toggle off.

How to Restrict Sign-ups to Specific Domains (B2B Mode)?

For B2B / corporate stores that should only accept sign-ups from approved company domains.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle Restrict signups to specific domains (B2B mode).
  • In Allowed domains, add the domains that are permitted to register — one per line. Wildcards supported (e.g. acme.com, *.partner.com).
  • Customize the Allowlist rejection message.
  • Click Save.
Important
When this toggle is ON, only the listed domains can sign up. Every other domain is rejected, regardless of the disposable/MX rules.
If a legitimate buyer is blocked, add their exact domain (or a wildcard like *.partner.com) to Allowed domains and save — there is no separate exemption list for this rule.

How to Block Specific Email Addresses?

For blocking individual bad actors by their exact email.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle Block specific email addresses.
  • Add full email addresses to Blocked email addresses — one per line, exact match (no wildcards).
  • Customize the Blocked email rejection message.
  • Click Save.
For domain-level blocking (e.g. block all @spam.com), use the Additional blocked domains field inside the disposable section instead — it supports domain matching.
blank

How to Enable AI Risk Scoring for Signups and Guest Checkout?

The rules above are yes/no gates: one bad trait and the sign-up is rejected. AI risk scoring works differently — it gives every registration and guest-checkout email a single score from 0 to 100, built from several weaker signals, and you decide what happens at each risk level. The signals are combined specifically so that one ordinary trait alone rarely reaches a block — but it can still happen on Strict sensitivity or in an unusual combination, so treat any block as a signal to check the reasons (see How to tell why a signup was blocked below), not as certain proof of spam.

Scoring runs entirely on your own server. There is no external service to sign up for and no API key. See Data retention & privacy at the end of this page for what is stored and for how long.

What the score is built from

SignalWhat it looks for
Random-looking mailboxKeyboard-mash / machine-generated local parts such as xk29fjq8a@…
Unusual domainA non-mainstream domain whose name looks randomly generated or throwaway-shaped
Role / plus addressRole mailboxes and plus-address abuse (admin+1@, info+promo@ and similar)
Many signups from one IPSign-up velocity — several different addresses submitted from the same IP in a short period

Sensitivity and risk bands

Sensitivity sets the two score cutoffs that separate low, medium and high risk:

SensitivityMedium risk fromHigh risk from
Low — only clearly risky signups5585
Balanced (recommended)4070
Strict — act on weaker combinations3055

For each band you choose one of three actions: AllowRequire a one-time code, or Block. The defaults are a one-time code at medium risk and a block at high risk. Anything below the medium cutoff is always allowed through untouched.

  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle AI spam & fraud risk scoring.
  • Choose a Risk sensitivity — Low, Balanced (recommended), or Strict.
  • Set At medium risk — Allow, Require a one-time code (default), or Block.
  • Set At high risk — Allow, Require a one-time code, or Block (default).
  • Customize the Risk block rejection message shown when a sign-up is blocked.
  • Click Save.
Note
Email-shape signals on their own rarely reach the high band on Balanced sensitivity. A real bot run repeats from the same IP, and it is that velocity signal that pushes the score into the block band. If you want weaker combinations acted on sooner, switch the sensitivity to Strict — doing so does increase the chance of a real customer being challenged or blocked.

Once scoring is on, the Risk column on Settings → Unverified Users → User List shows each entry’s score and the reasons behind it, and the Analytics tab gains an AI risk scoring card with the average score, how many sign-ups were scored, how many were blocked, and the top risk reasons for the period.

How to Enable Bot-Cluster Detection?

Risk scoring judges one email at a time. Bot-cluster detection looks at sign-ups as a group and spots the shape of a coordinated bot run — a burst of registrations that only looks suspicious when you see them together. Once a burst crosses the cluster size for your sensitivity, further sign-ups matching that cluster are blocked.

What counts as a cluster

PatternWhat it looks for
Network + fingerprint floodMany different emails from the same network block sharing an identical browser fingerprint — bots rotate IPs within a subnet but keep the same browser signature
Address enumerationSequential addresses on the same domain: john1@, john2@, john3@ and so on
Domain floodA burst of sign-ups all landing on the same non-mainstream domain

Sensitivity

Sensitivity decides how many matching sign-ups form a cluster before new ones are blocked. All counts are measured over a rolling ten-minute window:

SensitivityNetwork + fingerprintAddress enumerationDomain flood
Low — only large, obvious bursts8510
Balanced (recommended)546
Strict — block on smaller clusters334
  • Go to WooCommerce → Email Verification → Settings → Spam Protection.
  • Enable the toggle Bot signup-cluster detection.
  • Choose a Cluster sensitivity — Low, Balanced (recommended), or Strict.
  • Customize the Cluster block rejection message.
  • Click Save.
Note
Cluster counters are short-lived and only ever count distinct email addresses, so a customer retrying their own address never inflates a cluster. Mainstream mailbox providers such as Gmail and Outlook are never grouped into a domain flood, and the counters reset as the ten-minute window rolls forward — so ordinary traffic will not trip the rule.
No exclusion list for this rule
Unlike the disposable and B2B rules, there is currently no way to allowlist a specific network, office, or domain against cluster detection (only mainstream mailbox providers are exempted from the domain-flood pattern). If a legitimate burst — for example, many staff at one office signing up in a short window — is being blocked, your options today are to raise the sensitivity to Low or turn this toggle off.
AI risk scoring and bot-cluster detection are complementary and can safely run together: scoring catches the lone bad address, cluster detection catches the coordinated run that each individual address would have survived.

How to Tell Why a Signup Was Blocked?

Every block from any layer on this page is logged with its reason. Two places to check:

  • Unverified Users → User List — when AI risk scoring is on, the Risk column shows the score and specific reasons for that one entry.
  • Analytics dashboard — shows aggregate blocked-spam totals and the top blocked domains/reasons across a date range, so you can spot a rule that is firing more than expected.

Data Retention & Privacy

AI risk scoring and bot-cluster detection use short-lived counters (a rolling ten-minute window) that expire automatically and are never sent anywhere outside your server. Blocked and scored events are also written to the plugin’s verification-events log (the same log that powers the Analytics dashboard), which can include the email address, IP address, and the reasons for a score or block. This log is not currently pruned automatically by the Maintenance cleanup tools, which only manage pending unverified sign-ups — plan your own data-retention policy accordingly if you operate under GDPR or a similar regulation.