Customer Email Verification for WooCommerce

The Customer Email Verification Pro plugin adds a crucial layer of security to your WooCommerce store by integrating an email verification step into the registration and checkout process. This ensures that only valid email addresses can be used to create accounts, reducing spam registrations and increasing customer confidence.

Signup Verification

Require email verification at registration with full OTP configuration โ€” length, expiry, and resend limits.

Checkout Verification

Verify guest & registered customers before or during checkout โ€” choose Popup overlay or Inline OTP entry.

Login Authentication (2FA)

Require OTP for logins from new devices, new locations, or after a set number of days since last login.

OTP Length & Expiry

Choose 4-digit or 6-digit OTPs and set expiry times โ€” 10 min, 30 min, 1 hr, 24 hrs, 72 hrs, or never.

Spam Protection

Block disposable emails, fake domains, and unwanted addresses before the OTP is sent โ€” disposable list, MX validation, B2B allowlist, and custom blocked emails.

Auto-cleanup & Auto-delete

Keep your store clean automatically โ€” delete stale verification log rows and abandoned user accounts on a daily cron, with safeguards that never touch users with orders or recent logins.

Re-engagement Reminders

Bring back lapsed sign-ups automatically โ€” customizable email reminders at 1h, 24h, 3d, or 7d after sign-up with a one-click button to complete verification.

Getting started

↑ Back to top

Customer Email Verification Pro helps WooCommerce store owners reduce spam registrations and fake orders by requiring customers to verify their email address using a One-Time Password (OTP).

How to Install the Plugin?

↑ Back to top
  1. Download the plugin ZIP file from your zorem account.
  2. In WordPress admin, go to Plugins โ†’ Add New โ†’ Upload Plugin.
  3. Select the ZIP file and click Install Now.
  4. After installation, click Activate Plugin.

Settings

↑ Back to top

Configure email verification options by navigating to WooCommerce โ†’ Email Verification.

How to Enable Signup Verification?

↑ Back to top

Signup verification requires customers to verify their email address before their account is created.

  1. Go to WooCommerce โ†’ Email Verification.
  2. Toggle Enable Signup Verification to ON.
  3. Click Save Changes.

How it works: When a customer submits the registration form, they receive an OTP via email. The account is only created after successful verification of the OTP.

How to Enable Checkout Verification?

↑ Back to top

Checkout verification ensures customers verify their email before placing an order.

  1. Go to WooCommerce โ†’ Email Verification.
  2. Toggle Enable Checkout Verification to ON.
  3. Select the Checkout Verification Type:
    • Popup: Opens a popup window for OTP entry
    • Inline: Displays verification field directly on the checkout page
  4. Click Save Changes.

Additional Checkout Options

OptionDescription
Enable on cart pageShow verification popup on the cart page instead of checkout
Free orders onlyRequire verification only when order total is $0
Create account during checkoutOnly verify if customer opts to create an account (inline mode only)
Disable Store API CheckoutBlock WooCommerce Store API to prevent bypassing verification

How to Enable Login Authentication?

↑ Back to top

Login authentication adds an extra security layer by requiring OTP verification for suspicious login attempts.

  1. Go to WooCommerce โ†’ Email Verification.
  2. Scroll to the Login Authentication section.
  3. Toggle Enable Login Authentication to ON.
  4. Enable Require OTP verification for unrecognized login.
  5. Select the conditions that trigger verification:
    • Login from a new device
    • Login from a new location
    • Last login more than X days ago (15, 30, or 60 days)
  6. Click Save Changes.

How to Configure OTP Settings?

↑ Back to top

Customize the OTP behavior for all verification types.

  1. Go to WooCommerce โ†’ Email Verification.
  2. Locate the General Settings section.
  3. Configure the following options:
SettingOptions
OTP Length4-digit or 6-digit code
OTP ExpirationNever, 10 min, 15 min, 30 min, 1 hour, 24 hours, or 72 hours
Resend LimitAllow 1 attempt, 3 attempts, or disable resend
Resend Limit MessageCustom message when resend limit is reached
Success MessageMessage shown after successful verification

Spam Protection

↑ Back to top

Customer Email Verification Pro includes four independent layers of spam protection that run before the OTP is sent โ€” disposable email blocking, MX record validation, a B2B allowlist, and a custom blocked-emails list. Each layer is a separate toggle, so you can enable only the ones you need.

How to Block Disposable / Temporary Emails?

↑ Back to top

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

  • Go to 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.

Note

The blocklist is checked at signup, classic checkout, Blocks checkout, and edit-account email change.

How to Validate MX Records?

↑ Back to top

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.

  1. Go to Settings โ†’ Spam Protection.
  2. Enable the toggle Validate email domain (MX check).
  3. Customize the MX rejection message if needed.
  4. 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.

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

↑ Back to top

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

  1. Go to Settings โ†’ Spam Protection.
  2. Enable the toggle Restrict signups to specific domains (B2B mode).
  3. In Allowed domains, add the domains that are permitted to register โ€” one per line. Wildcards supported (e.g. acme.com*.partner.com).
  4. Customize the Allowlist rejection message.
  5. Click Save.

Important

When this toggle is ON, only the listed domains can sign up. Every other domain is

How to Block Specific Email Addresses?

↑ Back to top

For blocking individual bad actors by their exact email.

  1. Go to Settings โ†’ Spam Protection.
  2. Enable the toggle Block specific email addresses.
  3. Add full email addresses to Blocked email addresses โ€” one per line, exact match (no wildcards).
  4. Customize the Blocked email rejection message.
  5. Click Save.

Tip: 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.

Two-Factor Authentication (Authenticator App)

↑ Back to top

Add an extra layer of security to your store with Authenticator App 2FA. Customers and staff can scan a QR code in Google Authenticator, Authy, Microsoft Authenticator, 1Password, or any TOTP-compatible app, and from then on every login asks for a 6-digit time-based code in addition to their password.

What it does ?

↑ Back to top
  • Authenticator-App based 2FAย โ€” no SMS, no email OTPs, no third-party service. Setup is one-time and works with any RFC-6238 TOTP app.
  • Fully opt-inย โ€” no one is ever forced to enrol or blocked from logging in. The โ€œSet up 2FAโ€ card simply appears on the account page for users the policy applies to; they choose whether to enable it.
  • Role-based visibilityย โ€” show the 2FA option toย All users,ย Only users with selected roles, orย All users EXCEPT selected roles. Useful when you want to offer 2FA to staff but keep the option hidden from regular shoppers.
  • โ€œRemember this deviceโ€ trust cookieย โ€” after a successful 2FA verification, the same browser/device is remembered for 1, 3, 7, 14, or 30 days (admin-configurable). The user isnโ€™t re-prompted for a code until that period elapses or they sign in from a different browser.
  • Frontend prompt for customersย โ€” the 2FA verification step renders inside your store theme onย /my-account/, not on wp-login.php. Admins get the standard wp-login.php prompt.
  • Backup codesย โ€” 10 one-time-use recovery codes generated at enrolment, in case the user loses their phone.

How to enable it ?

↑ Back to top
  • Go toย WooCommerce โ†’ Email Verification โ†’ Settings โ†’ Two-Factor Authentication.
  • Toggleย Enable Authenticator App 2FAย on.
  • Chooseย Show 2FA option to:
    • All usersย โ€” the setup card is shown to everyone.
    • Only users with selected rolesย โ€” pick the roles below (e.g. Administrator, Shop manager) โ€” only those users see the setup card.
    • All users EXCEPT selected rolesย โ€” useful to hide 2FA from โ€œCustomerโ€ while keeping it for staff.
  • Pickย Remember this device forย โ€” how long a verified browser stays trusted (7 days is the recommended default).
  • Clickย Saveย at the top of the section.

How a user enrols (first-time setup) ?

↑ Back to top

When a user the policy applies to opens My Account โ†’ Two-Factor Auth (or for admin/editor users: Users โ†’ Profile), theyโ€™ll see a โ€œSet up 2FAโ€ card.

  • Clickย Set up two-factor authentication.
  • A QR code appears alongside a setup key.
  • Open the userโ€™s authenticator app (Google Authenticator, Authy, Microsoft Authenticator, 1Password, etc.) and either:
    • Scan the QR code with the appโ€™s camera,ย or
    • Tap โ€œEnter a setup keyโ€ / โ€œAdd manuallyโ€ in the app, then paste the setup key shown on screen.
  • The app immediately starts showing a 6-digit code that changes every 30 seconds.
  • Type the current 6-digit code into the โ€œEnter the 6-digit codeโ€ field on the setup card and clickย Verify & enable.
  • Important stepย โ€” the page now showsย 10 backup codes. The user MUST save these somewhere safe (password manager, printed copy, downloaded text file)ย before closing the page. These are the only way back into the account if the authenticator app is lost.

From the next login onward, the user will be asked for a 6-digit code from their authenticator app after entering their password.

How to use backup codes ?

↑ Back to top

Backup codes are 10 one-time-use codes (each 10 characters long, formatted like a1b2c-3d4e5) issued at enrolment. They exist so a user isnโ€™t locked out if they lose access to their authenticator app.

When to use a backup code ?

  • Lost your phone
  • Reinstalled your authenticator app and lost the entries
  • Got a new device and forgot to migrate
  • Authenticator appโ€™s clock is out of sync (rare, but possible)

How to enter a backup code at login ?

  • At the 2FA prompt during login,ย type one of your unused backup codes into the same โ€œEnter the 6-digit codeโ€ fieldย instead of a TOTP code.
  • Clickย Verify.

The plugin auto-detects whether the input is a 6-digit TOTP code or a 10-character backup code and handles each correctly โ€” thereโ€™s no separate โ€œuse backup codeโ€ link to click.

Important rules for backup codes

  • Each code can be usedย only once. After itโ€™s used, itโ€™s permanently consumed and canโ€™t be reused.
  • The plugin tracks how many backup codes you have left. When youโ€™re running low (say 2-3 codes remaining), you should regenerate.
  • Backup codes areย stored as hashes, not in plaintext โ€” neither the store admin nor a database leak can read them after enrolment. Thatโ€™s also why you must save them at the moment theyโ€™re issued; if you lose them, they canโ€™t be recovered, only regenerated.

How to regenerate backup codes ?

If the user has used most of them, or thinks the printed copy is no longer safe:

  • Go toย My Account โ†’ Edit Accountย (orย Users โ†’ Profileย for staff).
  • On the 2FA card, clickย Regenerate backup codes.
  • The previous codes areย invalidated immediatelyย and a new set of 10 is issued.
  • Save the new set somewhere safe.

What if a user loses everything (phone AND backup codes)?

The store admin can reset 2FA for that user:

  • Go toย Users โ†’ All Users, find the user, clickย Edit.
  • Scroll to the 2FA section and clickย Reset 2FA for this user.
  • Confirm in the dialog. The userโ€™s 2FA enrolment is wiped โ€” they can log in normally with just their password, then re-enrol if desired.

This action is admin-only and logged in the Analytics dashboard as a 2fa_disabled event.

Settings reference

↑ Back to top
SettingWhat it does
Enable Authenticator App 2FAMaster toggle. When off, the entire 2FA system is dormant โ€” no setup cards, no login prompts, even for users already enrolled.
Show 2FA option toDecides which users see the โ€œSet up 2FAโ€ card on their account page. Setup remains optional even for users the policy applies to.
RolesUsed by the two role-based policy modes above. Multi-select.
Remember this device forTrust-cookie lifetime after a successful 2FA verification. Don't remember makes the code prompt appear at every login.

Verification Analytics Dashboard

↑ Back to top

A new Analytics tab in WooCommerce โ†’ Email Verification that shows you exactly how the plugin is performing โ€” how many signups youโ€™re getting, how many complete email verification, how much spam is being blocked, and where the spam is coming from.

What it shows ?

↑ Back to top

KPI cards (top of the page)

  • Total Signupsย โ€” registered users (rows inย wp_users) created during the selected date range, excluding administrators and editors. This is the merchant-meaningful โ€œhow many people signed up this period.โ€
  • Verifiedย โ€” how many of those signups completed email verification (haveย customer_email_verified = โ€˜trueโ€™).
  • Spam Blockedย โ€” sum of all blocked email attempts in the period (disposable, MX-failed, blocklisted, not-in-allowlist).
  • Avg. Time to Verifyย โ€” median time between OTP sent and OTP verified, for users who completed verification.

Each card shows a small trend indicator below it: โ€œโ–ฒ +12.3% vs previous periodโ€ so you can see whether numbers are climbing.

Time-series chart

A line chart with three series โ€” Signups (blue), Verified (green), Blocked (red) โ€” across the selected date range.

The chartโ€™s bucket size automatically adapts to the range:

  • Last 7 days โ†’ daily buckets
  • Last 30 days โ†’ daily buckets
  • Last 90 days โ†’ weekly buckets
  • Custom range under 1 year โ†’ monthly buckets
  • Custom range 1+ year โ†’ yearly buckets

This keeps the line readable instead of flattening into a horizontal bar over a long range.

Verification funnel

A two-step funnel showing the drop-off from โ€œVerification email sentโ€ to โ€œCode verifiedโ€:

  • Step 1 โ€” Verification email sent: every OTP that left your server, including incomplete signups (people who got the email but never finished registration).
  • Step 2 โ€” Code verified: how many of those people actually entered the code correctly.

The percentage tells you the completion rate โ€” if step 2 is much lower than step 1, you have a lot of abandoned signups and might want to revisit your OTP email design or expire time.

Verification status widget

A snapshot of your registered users in the period, split between Verified (green bar) and Unverified (amber bar), with counts and percentages. Gives you a quick read on what fraction of your customer accounts are sitting unverified.

Top blocked domains

A top-10 list of which email domains are being blocked most โ€” useful for spotting which disposable-email providers are targeting your store, or whether your allowlist is too strict.

How to use the date range ?

↑ Back to top

The dropdown at the top right of the dashboard offers:

  • Last 7 days
  • Last 30 days (default โ€” opens to this every time)
  • Last 90 days
  • Custom range โ€” pick any two dates with the date pickers, click Apply.

The dashboard reloads instantly when you switch ranges. Custom date selections are remembered for the rest of your session โ€” if you switch to another range and back to Custom, the dates come back pre-filled.

What feeds the data?

↑ Back to top

Every verification-related event the plugin handles is logged to a dedicated wp_cev_verification_events table:

EventWhen it’s logged
otp_sentA verification email is sent (signup, checkout, edit-account, login auth)
otp_verifiedA user enters the correct code
otp_failedA user enters the wrong code
blocked_disposableA signup with a disposable email is blocked
blocked_mxA signup with a non-existent mail server is blocked
blocked_specific_emailA signup with an admin-banned email is blocked
blocked_not_in_allowlistA signup outside the B2B allowlist is blocked
2fa_verified / 2fa_failedA user enters their 2FA code (or backup code)
2fa_enrolledA user completes 2FA setup
auto_deletedA stale unverified user is cleaned up by the maintenance cron

You donโ€™t have to do anything โ€” events are recorded automatically. The first time you open the Analytics tab after upgrading from a previous version, the plugin runs a one-time migration that backfills historical data from your existing user list, so the dashboard isnโ€™t empty on day one.

Maintenance

↑ Back to top

The Maintenance tab keeps your store clean by auto-deleting stale verification records, removing abandoned user accounts, and bringing lapsed sign-ups back via re-engagement reminder emails. All three features are off by default and run on background daily crons.

You’ll find them at Settings โ†’ Unverified Users โ†’ Maintenance.

How to Auto-Cleanup Stale Verification Records?

↑ Back to top

The verification log table stores every email-verification attempt โ€” including bot traffic and abandoned sign-ups. Auto-cleanup deletes the unverified rows after a configurable retention window so the table doesn’t grow unbounded.

  1. Go to Settings โ†’ Unverified Users โ†’ Maintenance.
  2. Enable the toggle Auto-cleanup unverified records.
  3. Choose how long to keep pending records under Delete pending records after โ€” 14 days is recommended.
  4. Click Save.
  5. (Optional) Click Run cleanup now to execute immediately instead of waiting for the daily cron.

Note: Only pending records are deleted. Verified records stay forever as proof of verification.

How to Auto-Delete Unverified User Accounts?

↑ Back to top

This permanently deletes WordPress user accounts that registered but never verified their email. It’s destructive โ€” but ships with built-in safeguards so you can’t accidentally remove paying customers.

A user is never deleted if any of these are true:

  • They have at least one order (any status)
  • They have an active WooCommerce subscription
  • They have any role other than customer or subscriber
  • They’ve logged in within the last 30 days
  • They actually verified their email

To enable:

  1. Go to Settings โ†’ Unverified Users โ†’ Maintenance.
  2. Enable the toggle Auto-delete unverified user accounts. A confirmation modal listing the safeguards will appear โ€” read it and click Enable.
  3. Choose the retention window under Delete after โ€” minimum 30 days, 90 days recommended.
  4. Click Save.
  5. (Strongly recommended) Click Preview affected users to see exactly which users would be deleted on the next run, without deleting anything. This lets you sanity-check the safeguards before turning the cron loose.
  6. Click Run now when you’re ready, or wait for the daily cron.

Important: Always click Preview affected users before the first run. The list shows email, registration date, and role for every candidate.

How to Send Re-engagement Reminder Emails?

↑ Back to top

Bring back customers who started signing up but never completed email verification. The plugin emails them at the intervals you choose โ€” 1 hour / 24 hours / 3 days / 7 days after sign-up โ€” with a styled reminder and a one-click button to come back and finish.

  1. Go to Settings โ†’ Unverified Users โ†’ Maintenance.
  2. Enable the toggle Send re-engagement reminder emails.
  3. Under Send reminder at, select one or more intervals.
  4. Click Save.
  5. Click Customize email โ†’ to edit the subject, heading, body copy, button text, button link, and footer through the email customizer (matches the same workflow as your other CEV emails).
  6. (Optional) Click Send test to email a sample to your admin address before going live.
  7. (Optional) Click Run now to fire the cron immediately.

Note: Each user gets each interval at most once, ever โ€” no spam. Sends are capped at 50 per cron run to protect your SMTP. Reminders go to both registered users and guest checkout entries that exist in the verification log.

Customer Management

↑ Back to top

How to View Customer Verification Status?

↑ Back to top
  • Go to WordPress โ†’ Users.
  • The Email Verification column shows each userโ€™s status.
  • Use the filter dropdown to show only verified or unverified users.

How to Manually Verify a Customer?

↑ Back to top
  • Go to WordPress โ†’ Users.
  • Find the customer you want to verify.
  • Click the Verify action link, OR edit the user profile.

The Unverified Users tab lists every email that started verification but didnโ€™t finish โ€” both registered customers and guest checkout entries. From here you can resend reminders, export data, or remove rows in bulk.

Youโ€™ll find it at Settings โ†’ Unverified Users โ†’ User List.

How to View Unverified Users?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ User List.
  • The table shows pending verifications with the customerโ€™s name, email, and the date they last attempted verification.
  • The header strip displays pending count + oldest pending age at a glance.

How to Send a Reminder Email to a Specific User?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ User List.
  • Find the row for the customer.
  • Click the kebab menu (โ‹ฎ) at the right of the row.
  • Click Send reminder. The customizer-defined re-engagement email is sent to that customer immediately.

Note

Sending a reminder this way is independent of the cron โ€” you can send to any row, anytime, regardless of the configured intervals.

How to Send Reminders to Multiple Users at Once?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ User List.
  • Tick the checkboxes next to the users you want to email.
  • From the Bulk Action dropdown, choose Send re-engagement reminder.
  • Click Apply.
  • Confirm the send in the modal that appears.

Tick the checkbox in the column header to select every visible row at once.

How to Delete an Unverified User Entry?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ User List.
  • Click the kebab menu (โ‹ฎ) on the row.
  • Click Delete and confirm.

For bulk delete: tick multiple rows, choose Delete from the Bulk Action dropdown, click Apply, and confirm.

How to Export the Unverified User List to CSV?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ User List.
  • Click Export CSV in the top-right of the records card.
  • The file downloads with columns: ID, Email, Status, Last Updated.

The export includes the entire list, not just the visible page.

Customization

↑ Back to top

Customize the appearance of verification popups and emails to match your storeโ€™s branding.

How to Access the Customizer?

↑ Back to top
  • Go to WooCommerce โ†’ Email Verification.
  • Click on Customize in the settings menu.
  • The customizer opens with a live preview panel.
  • Select Popup Style or Popup Content from the left panel.

How to Customize the Popup Style?

↑ Back to top
  1. In the customizer, click Design โ†’ Popup Style.
  2. Adjust the settings below.
  3. Click Publish to save your changes
  4. In the customizer, click Design โ†’ Popup Style.
  5. Adjust the settings below.
  6. Click Publish to save your changes
SettingDescriptionDefault
Overlay Background ColorColor of lightbox overlay behind popup#ffffff
Widget Background ColorBackground color of popup widget#f5f5f5
SettingDescriptionRangeDefault
Content AlignmentAlign popup contentCenter, LeftCenter
Content WidthWidth of popup widget300px โ€“ 600px440px
Content PaddingInternal spacing10px โ€“ 100px30px
SettingDescriptionRangeDefault
Header ImageUpload logo or custom imageMedia uploadEmail icon
Image WidthWidth of header image25px โ€“ 250px80px
Header Font SizeSize of header text10px โ€“ 30px18px

Verification Button Settings

SettingDescriptionDefault
Button ColorBackground color of verify button#2296f3
Button Font ColorText color of verify button#ffffff
Button Font SizeSize of button text14px
Button PaddingInternal padding of button15px
Expand ButtonMake button full-widthDisabled

How to Customize the Popup Content?

  1. In the customizer, click Popup Content.
  2. Select the Widget Type from the dropdown.
  3. Edit the content fields for your selected type.
  4. Click Publish to save changes.

Available Widget Types

Widget TypeDescription
RegistrationPopup shown during account registration
Checkout Email PopupInitial email entry popup at checkout
Checkout OTP PopupOTP entry popup after code is sent
Login AuthenticationPopup for suspicious login attempts

How to Customize the Registration Popup Content?

  1. In the customizer, click Popup Content.
  2. Select Widget Type: Registration from the dropdown.
  3. Edit the following fields:
FieldDescriptionDefault Value
Header TextTitle at top of popupโ€œVerify itโ€™s you.โ€
Verification MessageMain message bodyโ€œWe sent verification code to {customer_email}. To verify your email address, please check your inbox and enter the code below.โ€
Footer TextText below formโ€œDidnโ€™t receive an email? {cev_resend_verification}โ€
Button TextVerify button textโ€œVerify Codeโ€

How to Customize the Checkout Email Popup Content?

  1. In the customizer, click Popup Content.
  2. Select Widget Type: Checkout Email Popup from the dropdown.
  3. Edit the following fields:
FieldDefault Value
Header Textโ€œVerify itโ€™s you.โ€
Verification Messageโ€œPlease verify your email address to proceed to checkout.โ€
Footer Textโ€œAlready have an account? Login nowโ€

How to Customize the Checkout OTP Popup Content?

  1. In the customizer, click Popup Content.
  2. Select Widget Type: Checkout OTP Popup from the dropdown.
  3. Edit the following fields:
FieldDefault Value
Header Textโ€œVerify itโ€™s you.โ€
Verification Messageโ€œWe sent verification code to {customer_email}. To verify your email address, please check your inbox and enter the code below.โ€
Footer Textโ€œDidnโ€™t receive an email? {cev_resend_verification}โ€

How to Customize the Login Authentication Popup Content?

  1. In the customizer, click Popup Content.
  2. Select Widget Type: Login Authentication from the dropdown.
  3. Edit the following fields:
FieldDefault Value
Header Textโ€œVerify itโ€™s you.โ€
Verification Messageโ€œWe sent verification code to {customer_email}. To verify your email address, please check your inbox and enter the code below.โ€
Footer Textโ€œDidnโ€™t receive an email? {cev_resend_verification}โ€
Button Textโ€œVerify Codeโ€
PlaceholderDescriptionExample
{customer_email}Customerโ€™s email addressjohn@example.com
{cev_resend_verification}Clickable resend linkResend Code

How to Access Email Customization?

↑ Back to top

Email Types Overview

The plugin supports 5 different email types, each sent for a specific verification scenario:

Email TypeWhen Itโ€™s SentContains OTP
RegistrationWhen customer registers a new accountโœ“ Yes
CheckoutWhen customer verifies email at checkoutโœ“ Yes
Edit AccountWhen customer changes their email addressโœ“ Yes
New Login OTPWhen OTP is required for suspicious loginโœ“ Yes
New Login AuthAlert for new login (informational only)โœ— No

How to Access Email Customization?

  1. Go to WooCommerce โ†’ Email Verification.
  2. Click on Customize in the settings menu.
  3. The customizer opens with a live preview panel.
  4. Click Design โ†’ Email Style to customize appearance.
  5. Click Email Content to customize text and messages.

How to Customize the Email Style?

Customize colors, layout, and header appearance for all verification emails.

Step-by-Step Instructions

  1. In the customizer, click Design โ†’ Email Style.
  2. The preview panel will show a sample email.
  3. Adjust the settings below.
  4. Click Publish to save your changes.

Email Layout Settings

SettingDescriptionRange/OptionsDefault
Content AlignmentAlign email content horizontallyCenter, LeftLeft
Content WidthWidth of the email content area400px โ€“ 1000px650px
Content PaddingInternal spacing inside the email10px โ€“ 100px30px

Email Color Settings

SettingDescriptionDefault
Background ColorBackground color of email content area#fafafa
Border ColorColor of the content border#e0e0e0
Font ColorColor of the email body text#333333

Email Header Settings

SettingDescriptionRange/OptionsDefault
Header ImageUpload your logo for emailsMedia uploadNone (empty)
Image WidthWidth of the header image50px โ€“ 300px80px
Header Font SizeSize of the heading text10px โ€“ 30px18px

Email Button Settings

SettingDescriptionDefault
Button ColorBackground color of the verify button#2296f3
Button Font ColorText color of the verify button#ffffff
Button Font SizeSize of button text14px
Button PaddingInternal padding of the button15px
Expand ButtonMake button full-widthDisabled

How to Customize Email Content?

Each email type has its own customizable content including subject, heading, body message, and footer.

Step-by-Step Instructions

  1. In the customizer, click Email Content.
  2. Select the Email Type from the dropdown menu.
  3. Edit the content fields for your selected email type.
  4. The preview panel updates in real-time.
  5. Click Publish to save changes.

Available Email Types in Dropdown

Email TypeDescription
RegistrationEmail sent during account registration
CheckoutEmail sent during checkout verification
Edit Account EmailEmail sent when customer changes email address
New Login OTPEmail with OTP for suspicious login verification
New Login AuthenticationAlert email for new login notification

How to Customize the Registration Email?

  1. In the customizer, click Email Content.
  2. Select Email Type: Registration from the dropdown.
  3. Edit the fields shown below.
  4. Click Publish to save changes.

Registration Email Settings

FieldDescription
Email SubjectSubject line that appears in customerโ€™s inbox
Email HeadingLarge heading text inside the email body
Verification MessageMain content explaining verification with OTP code
Footer ContentAdditional text displayed below the main content

Registration Email Default Values

FieldDefault Value
Email SubjectPlease Verify Your Email Address on {site_title}
Email HeadingVerify Your Email Address
Verification MessageThank you for signing up for {site_title}, to activate your account, we need to verify your email address.<p>Your verification code: <strong>{cev_user_verification_pin}</strong></p>
Footer Content(empty)

Available Placeholders for Registration Email

PlaceholderDescriptionExample Output
{site_title}Your website/store nameMy Store
{cev_user_verification_pin}The OTP verification code123456
{cev_display_name}Customerโ€™s display nameJohn

How to Customize the Checkout Email?

  1. In the customizer, click Email Content.
  2. Select Email Type: Checkout from the dropdown.
  3. Edit the fields shown below.
  4. Click Publish to save changes.

Checkout Email Settings

FieldDescription
Email SubjectSubject line that appears in customerโ€™s inbox
Email HeadingLarge heading text inside the email body
Verification MessageMain content explaining verification with OTP code
Footer ContentAdditional text displayed below the main content

Checkout Email Default Values

FieldDefault Value
Email SubjectPlease Verify Your Email Address on {site_title}
Email HeadingVerify Your Email Address
Verification MessageTo complete your order on {site_title}, please confirm your email address. This ensures we have the right email in case we need to contact you.<p>Your verification code: {cev_user_verification_pin}</p>
Footer Content(empty)

Available Placeholders for Checkout Email

PlaceholderDescriptionExample Output
{site_title}Your website/store nameMy Store
{cev_user_verification_pin}The OTP verification code123456
{cev_display_name}Customerโ€™s display nameJohn

How to Customize the Edit Account Email?

  1. In the customizer, click Email Content.
  2. Select Email Type: Edit Account Email from the dropdown.
  3. Edit the fields shown below.
  4. Click Publish to save changes.

Edit Account Email Settings

FieldDescription
Email SubjectSubject line that appears in customerโ€™s inbox
Email HeadingLarge heading text inside the email body
Verification MessageMain content explaining verification with OTP code
Footer ContentAdditional text displayed below the main content

Edit Account Email Default Values

FieldDefault Value
Email SubjectPlease Verify Your Email Address on {site_title}
Email HeadingYou recently changed the email address {site_title}
Verification MessageTo complete your order on {site_title}, please confirm your email address. This ensures we have the right email in case we need to contact you.<p>Your verification code: {cev_user_verification_pin}</p>
Footer Content(empty)

Available Placeholders for Edit Account Email

PlaceholderDescriptionExample Output
{site_title}Your website/store nameMy Store
{cev_user_verification_pin}The OTP verification code123456
{cev_display_name}Customerโ€™s display nameJohn

How to Customize the New Login OTP Email?

  1. In the customizer, click Email Content.
  2. Select Email Type: New Login OTP from the dropdown.
  3. Edit the fields shown below.
  4. Click Publish to save changes.

New Login OTP Email Settings

FieldDescription
Email SubjectSubject line that appears in customerโ€™s inbox
Email HeadingLarge heading text inside the email body
Verification MessageMain content with login details and OTP code
Footer ContentAdditional text displayed below the main content

New Login OTP Email Default Values

Default Value
New sign-in from {login_browser} on {login_device}
New sign-in from {login_browser} on {login_device}
(empty)

Default Verification Message Template

Hi {cev_display_name},

There was a new login to your {site_title} account from {login_browser} on {login_device}

We wanted to make sure it was you. Please verify your account using this OTP: {login_otp}

If you donโ€™t recognize this activity, please change your password right away.

Thanks

Available Placeholders for New Login OTP Email

PlaceholderDescriptionExample Output
{site_title}Your website/store nameMy Store
{cev_display_name}Customerโ€™s display nameJohn
{cev_user_verification_pin}The OTP verification code123456
{login_otp}The OTP code (alternative)123456
{login_browser}Browser name used for loginChrome
{login_device}Device type used for loginWindows
{login_time}Date and time of login attemptMarch 30, 2026 10:30 AM
{login_ip}IP address of login attempt192.168.1.1
{change_password}Link to change password page(clickable link)

How to Customize the New Login Authentication Email?

  1. In the customizer, click Email Content.
  2. Select Email Type: New Login Authentication from the dropdown.
  3. Edit the fields shown below.
  4. Click Publish to save changes.

New Login Authentication Email Settings

FieldDescription
Email SubjectSubject line that appears in customerโ€™s inbox
Email HeadingLarge heading text inside the email body
Verification MessageMain content with login details and security info
Footer ContentAdditional text displayed below the main content

New Login Authentication Email Default Values

FieldDefault Value
Email SubjectNew sign-in from {login_browser} on {login_device}
Email HeadingNew sign-in from {login_browser} on {login_device}
Footer Content(empty)

Default Verification Message Template

Hi {cev_display_name},

There was a new login to your {site_title} account from {login_browser} on {login_device}

We wanted to make sure it was you. Please check the details below:

Device: {login_browser}, {login_device}
Date: {login_time}
IP: {login_ip}

If you donโ€™t recognize this activity, please change your password right away.

Thanks

Available Placeholders for New Login Authentication Email

PlaceholderDescriptionExample Output
{site_title}Your website/store nameMy Store
{cev_display_name}Customerโ€™s display nameJohn
{login_browser}Browser name used for loginChrome
{login_device}Device type used for loginWindows
{login_time}Date and time of login attemptMarch 30, 2026 10:30 AM
{login_ip}IP address of login attempt192.168.1.1
{change_password}Link to change password page(clickable link)

Complete Email Placeholders Reference

All Available Placeholders by Email Type

PlaceholderRegistrationCheckoutEdit AccountLogin OTPLogin Auth
{site_title}โœ“โœ“โœ“โœ“โœ“
{cev_display_name}โœ“โœ“โœ“โœ“โœ“
{cev_user_verification_pin}โœ“โœ“โœ“โœ“โœ—
{login_otp}โœ—โœ—โœ—โœ“โœ—
{login_browser}โœ“โœ“โœ“โœ“โœ“
{login_device}โœ“โœ“โœ“โœ“โœ“
{login_time}โœ“โœ“โœ“โœ“โœ“
{login_ip}โœ“โœ“โœ“โœ“โœ“
{change_password}โœ—โœ—โœ—โœ“โœ“

Supported HTML Tags in Email Content

TagDescriptionExample
<a>Create links<a href="https://example.com">Click here</a>
<strong>Bold text<strong>Important</strong>
<i>Italic text<i>Note:</i>
<p>Paragraphs<p>Paragraph text</p>
<br>Line breaksLine 1<br>Line 2
  1. In the customizer, click Email Content.
  2. Select your desired Email Type from the dropdown.
  3. Scroll down to find the Footer Content field.
  4. Enter your footer text (HTML supported).
  5. Click Publish to save changes.

๐Ÿ’ก Tip: Each email type has its own footer content field, so you can customize different footer messages for each verification scenario.

How to Customize the Re-engagement Reminder Email?

↑ Back to top

The Re-engagement Reminder is the email sent to customers who started signing up but never finished email verification. Its subject, heading, body, CTA button, and footer are all editable through the Email Customizer โ€” the same place you customize the verification email and other CEV emails.

Before customizing, make sure the feature is enabled at Settings โ†’ Unverified Users โ†’ Maintenance โ†’ Send re-engagement reminder emails.

How to Open the Re-engagement Email in the Customizer?

↑ Back to top
  • Go to Settings โ†’ Unverified Users โ†’ Maintenance.
  • Inside the Re-engagement reminder emails card, click Customize email โ†’ at the top.
  • The Email Customizer opens with the Re-engagement Reminder template pre-loaded in the preview pane.

Alternatively:

  • Go to Customize tab in the plugin admin.
  • Open the Email Content panel.
  • Change the Email Type dropdown to Re-engagement Reminder.

Available merge tags for Re-engagement email:

  • {site_title} โ€” your store name
  • {cev_display_name} โ€” the customerโ€™s display name (or empty for guest entries)
  • {cev_user_email} โ€” the recipientโ€™s email address
  • {registration_page_url} โ€” direct link to the My Account / sign-up page

Always run a Send test after editing โ€” some email clients render HTML differently, and seeing the email in your real inbox is the only way to confirm spacing, fonts, and the CTA button look right.

Compatibility

↑ Back to top

Customer Email Verification Pro is tested and compatible with many popular plugins and features.

How to Use with WooCommerce Checkout Blocks?

↑ Back to top

The plugin fully supports WooCommerce Checkout Blocks (Cart and Checkout blocks).

  1. Enable Checkout Verification in the plugin settings.
  2. For inline verification, the OTP field appears in the checkout block automatically.
  3. For popup verification, the modal displays when needed.

Note: If you experience issues with third-party themes using the Store API, enable โ€œDisable WooCommerce Store API Checkoutโ€ in settings.

How to Use with REST API Customer Creation?

↑ Back to top

When customers are created via the WooCommerce REST API, verification works as follows:

  • Customers created via API are marked as unverified by default
  • Verification email is sent to the customer
  • Customer must verify email on first login

Compatible Third-Party Plugins

↑ Back to top
PluginCompatibility Notes
Affiliate For WooCommerceFull support for affiliate registration verification
Smart ManagerBulk edit verification status
Email Customizer Pro by StoreAppsCustom email templates supported
CashierOne-page checkout compatible
YITH Customize My AccountCustom My Account layouts supported
Essential Addons for ElementorElementor login forms supported
CheckoutWCCustom checkout pages supported
CartFlowsFunnel builder checkout compatible

Developers

↑ Back to top

Hooks and filters available for developers to extend plugin functionality.

How to Check User Verification Status?

↑ Back to top

Use the following code to check if a user has verified their email:

$is_verified = get_user_meta( $user_id, 'cev_email_verified', true );

if ( $is_verified === '1' ) {
    // User is verified
}

How to Change the OTP Button Label?

↑ Back to top

Use this filter to customize the โ€œSend Verification Codeโ€ button text:

add_filter( 'cev_checkout_send_otp_button_text', function( $text ) {
    return 'Get Your Code';
});

Available Filters

FilterDescription
cev_checkout_send_otp_button_textChange the OTP button text
cev_verification_email_contentModify verification email content
cev_otp_code_lengthProgrammatically set OTP length

Translations

↑ Back to top

Customer Email Verification Pro (CEV PRO) is fully compatible with WPML, allowing you to translate all plugin strings into any language for your multilingual WooCommerce store.

How to Translate CEV PRO Using WPML ?

↑ Back to top

Customer Email Verification (CEV PRO) is fully compatible with WPML, allowing you to easily translate all CEV PRO-related strings into your desired languages. With the WPML update, you can now translate strings individually or in bulk, using the enhanced translation interface.

Translating CEV PRO Using WPML

WPMLโ€™s String Translation and Translation Management tools make it simple to localize CEV PROโ€™s strings for your multilingual store. Below are step-by-step instructions on how to translate CEV PRO strings both individually and in bulk.

Bulk Translation via WPML Translation Dashboard

To translate multiple CEV PRO strings at once:

  1. Log in to your WordPress dashboard.
  2. Navigate to WPML > Translation Dashboard.
  3. Scroll down to the Other texts (Strings) section.
  4. In the Filter by field, search for CEV PRO strings using any of the following key names:
    • cev_verification_header
    • cev_verification_message
    • cev_verification_widget_footer
  5. Once the relevant strings are displayed, you can translate them in bulk:
    • Select the checkboxes for all the strings you want to translate and click Translate your content.


At Step 2, choose your translation method. To quickly translate multiple strings, choose Translate automatically from the dropdown. For the best results, ensure your translation engine is Private Translation Cloud (PTC), WPMLโ€™s proprietary AI. The Translation Dashboard shows you the cost of automatic translation in euros and credits. If you want to translate strings yourself, choose Translate myself.

When ready, click Translate.

With automatic translation, youโ€™re all set! PTC translates your selected content in a few minutes. If youโ€™ve chosen to translate yourself, navigate to WPML > Translations to add your translations for each string.

Sync Your Translations

Once youโ€™ve translated the strings, ensure they are synced across your website. If youโ€™ve chosen to publish without review, WPML automatically applies translations. Otherwise, go to WPML > Translations to review translated content and publish.

Related Products

Let customers subscribe to your products or services and pay on a weekly, monthly or annual basis.

Protect your eCommerce store from malicious and automated attacks by using reCaptcha/Cloudflare Turnstile/hCaptcha for WooCommerce.

Use of your personal data
We and our partners process your personal data (such as browsing data, IP Addresses, cookie information, and other unique identifiers) based on your consent and/or our legitimate interest to optimize our website, marketing activities, and your user experience.