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 topCustomer 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- Download the plugin ZIP file from your zorem account.
- In WordPress admin, go to Plugins โ Add New โ Upload Plugin.
- Select the ZIP file and click Install Now.
- After installation, click Activate Plugin.
Settings
↑ Back to topConfigure email verification options by navigating to WooCommerce โ Email Verification.
How to Enable Signup Verification?
↑ Back to topSignup verification requires customers to verify their email address before their account is created.
- Go to WooCommerce โ Email Verification.
- Toggle Enable Signup Verification to ON.
- 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 topCheckout verification ensures customers verify their email before placing an order.
- Go to WooCommerce โ Email Verification.
- Toggle Enable Checkout Verification to ON.
- Select the Checkout Verification Type:
- Popup: Opens a popup window for OTP entry
- Inline: Displays verification field directly on the checkout page
- Click Save Changes.
Additional Checkout Options
| Option | Description |
|---|---|
| Enable on cart page | Show verification popup on the cart page instead of checkout |
| Free orders only | Require verification only when order total is $0 |
| Create account during checkout | Only verify if customer opts to create an account (inline mode only) |
| Disable Store API Checkout | Block WooCommerce Store API to prevent bypassing verification |

How to Enable Login Authentication?
↑ Back to topLogin authentication adds an extra security layer by requiring OTP verification for suspicious login attempts.
- Go to WooCommerce โ Email Verification.
- Scroll to the Login Authentication section.
- Toggle Enable Login Authentication to ON.
- Enable Require OTP verification for unrecognized login.
- 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)
- Click Save Changes.

How to Configure OTP Settings?
↑ Back to topCustomize the OTP behavior for all verification types.
- Go to WooCommerce โ Email Verification.
- Locate the General Settings section.
- Configure the following options:
| Setting | Options |
|---|---|
| OTP Length | 4-digit or 6-digit code |
| OTP Expiration | Never, 10 min, 15 min, 30 min, 1 hour, 24 hours, or 72 hours |
| Resend Limit | Allow 1 attempt, 3 attempts, or disable resend |
| Resend Limit Message | Custom message when resend limit is reached |
| Success Message | Message shown after successful verification |

Spam Protection
↑ Back to topCustomer 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 topThe 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 topThe 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 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.

How to Restrict Sign-ups to Specific Domains (B2B Mode)?
↑ Back to topFor B2B / corporate stores that should only accept sign-ups from approved company domains.
- Go to 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

How to Block Specific Email Addresses?
↑ Back to topFor blocking individual bad actors by their exact email.
- Go to 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.
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 topAdd 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 topWhen 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 topBackup 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| Setting | What it does |
|---|---|
| Enable Authenticator App 2FA | Master toggle. When off, the entire 2FA system is dormant โ no setup cards, no login prompts, even for users already enrolled. |
| Show 2FA option to | Decides which users see the โSet up 2FAโ card on their account page. Setup remains optional even for users the policy applies to. |
| Roles | Used by the two role-based policy modes above. Multi-select. |
| Remember this device for | Trust-cookie lifetime after a successful 2FA verification. Don't remember makes the code prompt appear at every login. |
Verification Analytics Dashboard
↑ Back to topA 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 topKPI 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 topThe 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 topEvery verification-related event the plugin handles is logged to a dedicated wp_cev_verification_events table:
| Event | When it’s logged |
|---|---|
otp_sent | A verification email is sent (signup, checkout, edit-account, login auth) |
otp_verified | A user enters the correct code |
otp_failed | A user enters the wrong code |
blocked_disposable | A signup with a disposable email is blocked |
blocked_mx | A signup with a non-existent mail server is blocked |
blocked_specific_email | A signup with an admin-banned email is blocked |
blocked_not_in_allowlist | A signup outside the B2B allowlist is blocked |
2fa_verified / 2fa_failed | A user enters their 2FA code (or backup code) |
2fa_enrolled | A user completes 2FA setup |
auto_deleted | A 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 topThe 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 topThe 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.
- Go to Settings โ Unverified Users โ Maintenance.
- Enable the toggle Auto-cleanup unverified records.
- Choose how long to keep pending records under Delete pending records after โ 14 days is recommended.
- Click Save.
- (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 topThis 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:
- Go to Settings โ Unverified Users โ Maintenance.
- Enable the toggle Auto-delete unverified user accounts. A confirmation modal listing the safeguards will appear โ read it and click Enable.
- Choose the retention window under Delete after โ minimum 30 days, 90 days recommended.
- Click Save.
- (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.
- 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 topBring 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.
- Go to Settings โ Unverified Users โ Maintenance.
- Enable the toggle Send re-engagement reminder emails.
- Under Send reminder at, select one or more intervals.
- Click Save.
- 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).
- (Optional) Click Send test to email a sample to your admin address before going live.
- (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 topHow 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 topCustomize 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- In the customizer, click Design โ Popup Style.
- Adjust the settings below.
- Click Publish to save your changes
- In the customizer, click Design โ Popup Style.
- Adjust the settings below.
- Click Publish to save your changes
| Setting | Description | Default |
|---|---|---|
| Overlay Background Color | Color of lightbox overlay behind popup | #ffffff |
| Widget Background Color | Background color of popup widget | #f5f5f5 |
Popup Layout Settings
| Setting | Description | Range | Default |
|---|---|---|---|
| Content Alignment | Align popup content | Center, Left | Center |
| Content Width | Width of popup widget | 300px โ 600px | 440px |
| Content Padding | Internal spacing | 10px โ 100px | 30px |
Popup Header Settings
| Setting | Description | Range | Default |
|---|---|---|---|
| Header Image | Upload logo or custom image | Media upload | Email icon |
| Image Width | Width of header image | 25px โ 250px | 80px |
| Header Font Size | Size of header text | 10px โ 30px | 18px |
Verification Button Settings
| Setting | Description | Default |
|---|---|---|
| Button Color | Background color of verify button | #2296f3 |
| Button Font Color | Text color of verify button | #ffffff |
| Button Font Size | Size of button text | 14px |
| Button Padding | Internal padding of button | 15px |
| Expand Button | Make button full-width | Disabled |

How to Customize the Popup Content?
- In the customizer, click Popup Content.
- Select the Widget Type from the dropdown.
- Edit the content fields for your selected type.
- Click Publish to save changes.
Available Widget Types
| Widget Type | Description |
|---|---|
| Registration | Popup shown during account registration |
| Checkout Email Popup | Initial email entry popup at checkout |
| Checkout OTP Popup | OTP entry popup after code is sent |
| Login Authentication | Popup for suspicious login attempts |
How to Customize the Registration Popup Content?
- In the customizer, click Popup Content.
- Select Widget Type: Registration from the dropdown.
- Edit the following fields:
| Field | Description | Default Value |
|---|---|---|
| Header Text | Title at top of popup | โVerify itโs you.โ |
| Verification Message | Main message body | โWe sent verification code to {customer_email}. To verify your email address, please check your inbox and enter the code below.โ |
| Footer Text | Text below form | โDidnโt receive an email? {cev_resend_verification}โ |
| Button Text | Verify button text | โVerify Codeโ |
How to Customize the Checkout Email Popup Content?
- In the customizer, click Popup Content.
- Select Widget Type: Checkout Email Popup from the dropdown.
- Edit the following fields:
| Field | Default 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?
- In the customizer, click Popup Content.
- Select Widget Type: Checkout OTP Popup from the dropdown.
- Edit the following fields:
| Field | Default 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?
- In the customizer, click Popup Content.
- Select Widget Type: Login Authentication from the dropdown.
- Edit the following fields:
| Field | Default 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โ |
Popup Content Placeholders
| Placeholder | Description | Example |
|---|---|---|
| {customer_email} | Customerโs email address | john@example.com |
| {cev_resend_verification} | Clickable resend link | Resend Code |

How to Access Email Customization?
↑ Back to topEmail Types Overview
The plugin supports 5 different email types, each sent for a specific verification scenario:
| Email Type | When Itโs Sent | Contains OTP |
|---|---|---|
| Registration | When customer registers a new account | โ Yes |
| Checkout | When customer verifies email at checkout | โ Yes |
| Edit Account | When customer changes their email address | โ Yes |
| New Login OTP | When OTP is required for suspicious login | โ Yes |
| New Login Auth | Alert for new login (informational only) | โ No |
How to Access Email Customization?
- Go to WooCommerce โ Email Verification.
- Click on Customize in the settings menu.
- The customizer opens with a live preview panel.
- Click Design โ Email Style to customize appearance.
- 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
- In the customizer, click Design โ Email Style.
- The preview panel will show a sample email.
- Adjust the settings below.
- Click Publish to save your changes.
Email Layout Settings
| Setting | Description | Range/Options | Default |
|---|---|---|---|
| Content Alignment | Align email content horizontally | Center, Left | Left |
| Content Width | Width of the email content area | 400px โ 1000px | 650px |
| Content Padding | Internal spacing inside the email | 10px โ 100px | 30px |
Email Color Settings
| Setting | Description | Default |
|---|---|---|
| Background Color | Background color of email content area | #fafafa |
| Border Color | Color of the content border | #e0e0e0 |
| Font Color | Color of the email body text | #333333 |
Email Header Settings
| Setting | Description | Range/Options | Default |
|---|---|---|---|
| Header Image | Upload your logo for emails | Media upload | None (empty) |
| Image Width | Width of the header image | 50px โ 300px | 80px |
| Header Font Size | Size of the heading text | 10px โ 30px | 18px |
Email Button Settings
| Setting | Description | Default |
|---|---|---|
| Button Color | Background color of the verify button | #2296f3 |
| Button Font Color | Text color of the verify button | #ffffff |
| Button Font Size | Size of button text | 14px |
| Button Padding | Internal padding of the button | 15px |
| Expand Button | Make button full-width | Disabled |
How to Customize Email Content?
Each email type has its own customizable content including subject, heading, body message, and footer.
Step-by-Step Instructions
- In the customizer, click Email Content.
- Select the Email Type from the dropdown menu.
- Edit the content fields for your selected email type.
- The preview panel updates in real-time.
- Click Publish to save changes.
Available Email Types in Dropdown
| Email Type | Description |
|---|---|
| Registration | Email sent during account registration |
| Checkout | Email sent during checkout verification |
| Edit Account Email | Email sent when customer changes email address |
| New Login OTP | Email with OTP for suspicious login verification |
| New Login Authentication | Alert email for new login notification |
How to Customize the Registration Email?
- In the customizer, click Email Content.
- Select Email Type: Registration from the dropdown.
- Edit the fields shown below.
- Click Publish to save changes.
Registration Email Settings
| Field | Description |
|---|---|
| Email Subject | Subject line that appears in customerโs inbox |
| Email Heading | Large heading text inside the email body |
| Verification Message | Main content explaining verification with OTP code |
| Footer Content | Additional text displayed below the main content |
Registration Email Default Values
| Field | Default Value |
|---|---|
| Email Subject | Please Verify Your Email Address on {site_title} |
| Email Heading | Verify Your Email Address |
| Verification Message | Thank 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
| Placeholder | Description | Example Output |
|---|---|---|
| {site_title} | Your website/store name | My Store |
| {cev_user_verification_pin} | The OTP verification code | 123456 |
| {cev_display_name} | Customerโs display name | John |
How to Customize the Checkout Email?
- In the customizer, click Email Content.
- Select Email Type: Checkout from the dropdown.
- Edit the fields shown below.
- Click Publish to save changes.
Checkout Email Settings
| Field | Description |
|---|---|
| Email Subject | Subject line that appears in customerโs inbox |
| Email Heading | Large heading text inside the email body |
| Verification Message | Main content explaining verification with OTP code |
| Footer Content | Additional text displayed below the main content |
Checkout Email Default Values
| Field | Default Value |
|---|---|
| Email Subject | Please Verify Your Email Address on {site_title} |
| Email Heading | Verify Your Email Address |
| Verification Message | To 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
| Placeholder | Description | Example Output |
|---|---|---|
| {site_title} | Your website/store name | My Store |
| {cev_user_verification_pin} | The OTP verification code | 123456 |
| {cev_display_name} | Customerโs display name | John |
How to Customize the Edit Account Email?
- In the customizer, click Email Content.
- Select Email Type: Edit Account Email from the dropdown.
- Edit the fields shown below.
- Click Publish to save changes.
Edit Account Email Settings
| Field | Description |
|---|---|
| Email Subject | Subject line that appears in customerโs inbox |
| Email Heading | Large heading text inside the email body |
| Verification Message | Main content explaining verification with OTP code |
| Footer Content | Additional text displayed below the main content |
Edit Account Email Default Values
| Field | Default Value |
|---|---|
| Email Subject | Please Verify Your Email Address on {site_title} |
| Email Heading | You recently changed the email address {site_title} |
| Verification Message | To 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
| Placeholder | Description | Example Output |
|---|---|---|
| {site_title} | Your website/store name | My Store |
| {cev_user_verification_pin} | The OTP verification code | 123456 |
| {cev_display_name} | Customerโs display name | John |
How to Customize the New Login OTP Email?
- In the customizer, click Email Content.
- Select Email Type: New Login OTP from the dropdown.
- Edit the fields shown below.
- Click Publish to save changes.
New Login OTP Email Settings
| Field | Description |
|---|---|
| Email Subject | Subject line that appears in customerโs inbox |
| Email Heading | Large heading text inside the email body |
| Verification Message | Main content with login details and OTP code |
| Footer Content | Additional 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
| Placeholder | Description | Example Output |
|---|---|---|
| {site_title} | Your website/store name | My Store |
| {cev_display_name} | Customerโs display name | John |
| {cev_user_verification_pin} | The OTP verification code | 123456 |
| {login_otp} | The OTP code (alternative) | 123456 |
| {login_browser} | Browser name used for login | Chrome |
| {login_device} | Device type used for login | Windows |
| {login_time} | Date and time of login attempt | March 30, 2026 10:30 AM |
| {login_ip} | IP address of login attempt | 192.168.1.1 |
| {change_password} | Link to change password page | (clickable link) |
How to Customize the New Login Authentication Email?
- In the customizer, click Email Content.
- Select Email Type: New Login Authentication from the dropdown.
- Edit the fields shown below.
- Click Publish to save changes.
New Login Authentication Email Settings
| Field | Description |
|---|---|
| Email Subject | Subject line that appears in customerโs inbox |
| Email Heading | Large heading text inside the email body |
| Verification Message | Main content with login details and security info |
| Footer Content | Additional text displayed below the main content |
New Login Authentication Email Default Values
| Field | Default Value |
|---|---|
| Email Subject | New sign-in from {login_browser} on {login_device} |
| Email Heading | New 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
| Placeholder | Description | Example Output |
|---|---|---|
| {site_title} | Your website/store name | My Store |
| {cev_display_name} | Customerโs display name | John |
| {login_browser} | Browser name used for login | Chrome |
| {login_device} | Device type used for login | Windows |
| {login_time} | Date and time of login attempt | March 30, 2026 10:30 AM |
| {login_ip} | IP address of login attempt | 192.168.1.1 |
| {change_password} | Link to change password page | (clickable link) |
Complete Email Placeholders Reference
All Available Placeholders by Email Type
| Placeholder | Registration | Checkout | Edit Account | Login OTP | Login 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
| Tag | Description | Example |
|---|---|---|
<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 breaks | Line 1<br>Line 2 |
How to Add Footer Content to Emails?
- In the customizer, click Email Content.
- Select your desired Email Type from the dropdown.
- Scroll down to find the Footer Content field.
- Enter your footer text (HTML supported).
- 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 topThe 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 topCustomer Email Verification Pro is tested and compatible with many popular plugins and features.
How to Use with WooCommerce Checkout Blocks?
↑ Back to topThe plugin fully supports WooCommerce Checkout Blocks (Cart and Checkout blocks).
- Enable Checkout Verification in the plugin settings.
- For inline verification, the OTP field appears in the checkout block automatically.
- 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 topWhen 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| Plugin | Compatibility Notes |
|---|---|
| Affiliate For WooCommerce | Full support for affiliate registration verification |
| Smart Manager | Bulk edit verification status |
| Email Customizer Pro by StoreApps | Custom email templates supported |
| Cashier | One-page checkout compatible |
| YITH Customize My Account | Custom My Account layouts supported |
| Essential Addons for Elementor | Elementor login forms supported |
| CheckoutWC | Custom checkout pages supported |
| CartFlows | Funnel builder checkout compatible |
Developers
↑ Back to topHooks and filters available for developers to extend plugin functionality.
How to Check User Verification Status?
↑ Back to topUse 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 topUse 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
| Filter | Description |
|---|---|
cev_checkout_send_otp_button_text | Change the OTP button text |
cev_verification_email_content | Modify verification email content |
cev_otp_code_length | Programmatically set OTP length |
Translations
↑ Back to topCustomer 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 topCustomer 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:
- Log in to your WordPress dashboard.
- Navigate to WPML > Translation Dashboard.
- Scroll down to the Other texts (Strings) section.
- In the Filter by field, search for CEV PRO strings using any of the following key names:
cev_verification_headercev_verification_messagecev_verification_widget_footer
- 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.