WordPress + VerifyAnyEmail
Official pluginOur official WordPress plugin verifies email addresses in real time and blocks fake, disposable and undeliverable ones. It works with standard WordPress registration, comment forms and WooCommerce checkout — no code required.
Plugin details
- Version
- 1.0.0
- Requires WordPress
- 5.5+
- Tested up to
- WordPress 6.6
- WooCommerce
- Supported
- Requires PHP
- 7.2+
- License
- GPL-2.0-or-later
Behaviour & privacy
- Fail-open: if the API can’t be reached within the timeout, the address is allowed through so an outage never blocks checkout.
- Strictness: blocks clearly undeliverable addresses; optionally also risky/unknown.
- Caching: results cached 12 hours per address to avoid duplicate credit use.
- Data: only the address being checked is sent, over HTTPS, with your API key. No data is sold.
- Settings: Settings → VerifyAnyEmail (API key, where to verify, strictness, timeout).
A public WordPress.org listing and signed release are planned. Changelog: v1.0.0 — initial release (registration, WooCommerce checkout, comment verification).
Setup
- 1Download & install
Download the plugin ZIP below, then in WordPress go to Plugins → Add New → Upload Plugin, choose the ZIP and activate it.
- 2Add your API key
Open Settings → VerifyAnyEmail and paste the API key from your VerifyAnyEmail dashboard (API keys section).
- 3Choose where to verify
Enable verification on user registration, WooCommerce checkout and/or comment author email. Save.
- 4Done
Bad addresses are now blocked at the point of entry. The plugin fails open on API errors so an outage never blocks checkout, and caches results for 12 hours to avoid duplicate charges.
Handling the result
Every verification returns a result object with a status, a 0–100 score and a “did you mean” suggestion for typos. Branch on the status:
| status | Meaning | Recommended action |
|---|---|---|
| deliverable | Mailbox exists and accepts mail | Accept |
| undeliverable | Invalid syntax, no MX, or rejected mailbox | Block / reject |
| risky | Accepts but low quality (catch-all, role, disposable) | Allow with caution, or challenge |
| unknown | Couldn’t determine (greylist, timeout, blocked port) | Allow (fail-open) or retry later |
For sign-up and checkout forms, the safe default is to block only undeliverable so you never turn away a real customer, and to surface the suggestion (“did you mean gmail.com?”) inline to recover typos.
Security & reliability
- Keep your API key server-side. Never expose it in client-side JavaScript. In WordPress, store it in the integration’s credential/secret store, not in a shared script.
- Fail open. If the API errors or times out, let the address through rather than blocking a real user over a transient issue.
- Retry transient errors. Back off and retry on
429(rate limit) and5xx; don’t retry4xxvalidation errors. - Cache per address. One credit is spent per unique verification — cache results (e.g. 12–24h) so re-submits don’t re-charge.
- Tag the source. This recipe sends
X-VAE-Source: wordpressso your dashboard shows where verifications come from.
Troubleshooting
| Response | Cause & fix |
|---|---|
| 401 | Missing or wrong API key — check the Authorization header is Bearer YOUR_API_KEY. |
| 402 | Out of credits — top up in the dashboard. (The plugin fails open in this case.) |
| 429 | Rate limited — slow down or upgrade your plan; back off and retry. |
| No result written | Confirm you’re reading result.status, and that the request body is { "email": "…" } as JSON. |