{"id":384784,"date":"2026-10-17T06:21:50","date_gmt":"2026-10-17T06:21:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/zbounce-email-validator\/"},"modified":"2026-10-17T06:32:55","modified_gmt":"2026-10-17T06:32:55","slug":"zbounce-email-validator","status":"publish","type":"plugin","link":"https:\/\/bo.wordpress.org\/plugins\/zbounce-email-validator\/","author":23577381,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.6","stable_tag":"1.2.6","tested":"7.1.3","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"ZBounce Email Validator","header_author":"ZBounce.net","header_description":"Checks form email addresses through the ZBounce service using your purchased API key.","assets_banners_color":"343c35","last_updated":"2026-10-17 06:32:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/zbounce-net\/wordpress","header_author_uri":"https:\/\/zbounce.net","rating":5,"author_block_rating":0,"active_installs":0,"downloads":63,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.6":{"tag":"1.2.6","author":"zbounce","date":"2026-10-17 06:32:55","revision":3751471}},"upgrade_notice":{"1.2.6":"<p>Settings and cached results are migrated automatically. If you used the administrator tester shortcode, replace [zb_email_validator] with [zbounce_email_validator].<\/p>","1.2.5":"<p>Save your API key and accept the service agreement to use the manual tester and balance. Automatic form verification remains a separate opt-in switch.<\/p>","1.2.0":"<p>External checks now require your purchased API key and explicit enablement in Settings. Demo fallback is removed. Review the external service disclosure before enabling checks.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3751471,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3751471,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3751471,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3751471,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3751471,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3751471,"resolution":"2","location":"assets","locale":"","width":800,"height":730},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3751471,"resolution":"3","location":"assets","locale":"","width":800,"height":730},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3751471,"resolution":"4","location":"assets","locale":"","width":800,"height":1294},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3751471,"resolution":"5","location":"assets","locale":"","width":1000,"height":330}},"screenshots":{"1":"Settings page: remaining verification credits, connection check and the manual tester.","2":"Manual check of an existing mailbox: allowed under your form policy.","3":"A mailbox that does not exist: rejected under the default policy.","4":"Accepted result policy and integrations: Contact Form 7, WooCommerce checkout, registration, Gravity Forms, WPForms and Ninja Forms.","5":"Contact Form 7 rejecting a disposable address when the form is submitted."}},"plugin_section":[],"plugin_tags":[1152,2182,18971,4248,286],"plugin_category":[45],"plugin_contributors":[287186],"plugin_business_model":[],"class_list":["post-384784","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form-7","plugin_tags-email-validation","plugin_tags-email-verification","plugin_tags-spam-prevention","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-zbounce","plugin_committers-zbounce"],"banners":{"banner":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/banner-772x250.png?rev=3751471","banner_2x":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/banner-1544x500.png?rev=3751471","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/icon-128x128.png?rev=3751471","icon_2x":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/icon-256x256.png?rev=3751471","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/screenshot-1.png?rev=3751471","caption":"Settings page: remaining verification credits, connection check and the manual tester."},{"src":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/screenshot-2.png?rev=3751471","caption":"Manual check of an existing mailbox: allowed under your form policy."},{"src":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/screenshot-3.png?rev=3751471","caption":"A mailbox that does not exist: rejected under the default policy."},{"src":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/screenshot-4.png?rev=3751471","caption":"Accepted result policy and integrations: Contact Form 7, WooCommerce checkout, registration, Gravity Forms, WPForms and Ninja Forms."},{"src":"https:\/\/ps.w.org\/zbounce-email-validator\/assets\/screenshot-5.png?rev=3751471","caption":"Contact Form 7 rejecting a disposable address when the form is submitted."}],"raw_content":"<!--section=description-->\n<p>ZBounce Email Validator checks email addresses submitted through selected forms using the ZBounce email verification service.<\/p>\n\n<p>The plugin is free and open source. External verification requires a paid ZBounce credit package. Buy credits at https:\/\/zbounce.net\/pricing.html and enter the API key received after checkout in Settings &gt; ZBounce Email. There is no separate paid plugin edition or local license activation.<\/p>\n\n<p>API use requires a saved key and accepted service agreement. Automatic form checks are separately disabled until explicitly enabled. The plugin does not use the public demo endpoint or fall back to a free service when a key fails.<\/p>\n\n<p>By default, the plugin rejects addresses reported by the API as invalid, disposable, or having no mailbox. Catch-all and undecided mailbox results are not automatically rejected. Verification cannot guarantee delivery or prevent every spam submission; use it alongside your existing form protections.<\/p>\n\n<p>Integrations:\n* Contact Form 7.\n* WooCommerce classic checkout and Checkout Block.\n* WordPress registration.\n* Selected Gravity Forms, WPForms and Ninja Forms forms.<\/p>\n\n<p>Results are cached locally for a configurable 1\u2013168 hours (24 hours by default). Unknown mailbox results and API failures are not cached or presented as confirmed mailboxes. Your accepted-results policy determines whether those submissions pass; the default policy allows them.<\/p>\n\n<p>The [zbounce_email_validator] shortcode provides a standalone tester for logged-in administrators only. It is not a public widget that can consume your credits anonymously.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on ZBounce (https:\/\/zbounce.net\/) for remote email verification.<\/p>\n\n<p>After saving an API key and accepting the service agreement, administrators can run manual email checks. Automatic form checks additionally require enabling Automatic form verification. Uncached checks send the email address as JSON to https:\/\/api.zbounce.net\/v1\/fast-verify, with the API key in the X-API-Key HTTP header. Paused automatic checks do not read cached decisions or block forms.<\/p>\n\n<p>Opening the settings page and the administrator's Check connection and balance button send the API key to https:\/\/api.zbounce.net\/v1\/me. That request does not include an email address and does not run a verification.<\/p>\n\n<p>Requests are made from the WordPress server over HTTPS. The service receives the server's network address and normal HTTP request metadata. The plugin does not include other form fields, names, passwords, payment details or the visitor's IP address in its API payload. API keys are not exposed to frontend JavaScript.<\/p>\n\n<p>The API key is stored in WordPress options. Cached results, including checked email addresses, are stored in the site's WordPress database. Expired cache entries are ignored on reads and removed during subsequent writes; expiration is not a promise of immediate physical deletion. WordPress personal-data export and erasure tools include this local verification cache. These tools do not request new checks or erase data held by the external service. Deactivation preserves settings and cache; deletion of the plugin removes them.<\/p>\n\n<p>Site owners are responsible for informing their visitors about this external processing. Review the service policies before enabling checks:\n* Terms of service: https:\/\/zbounce.net\/terms.html\n* Privacy policy: https:\/\/zbounce.net\/privacy.html\n* Service license agreement: https:\/\/zbounce.net\/license.html<\/p>\n\n<h3>Verification policy<\/h3>\n\n<p>Choose accepted results in Settings: valid, risky (accept-all), disposable, invalid format, no-mail domain, missing mailbox, unknown, and API unavailable. Checked results pass. Native form format checks still apply. Defaults allow valid, risky, unknown and API unavailable; other results are rejected. SMTP uncertainty is distinct from API connection\/key\/balance failure. Rules re-evaluate cached results immediately. Unknown and failed checks are not cached.<\/p>\n\n<p>WooCommerce Checkout Block validates the billing email server-side when an order is submitted, before payment. Intermediate checkout draft updates do not trigger verification. Classic checkout remains supported.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the zbounce-email-validator folder to \/wp-content\/plugins\/ or install its ZIP from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate ZBounce Email Validator.<\/li>\n<li>Buy a verification package at https:\/\/zbounce.net\/pricing.html and copy the API key shown after payment.<\/li>\n<li>Open Settings &gt; ZBounce Email, paste the key, accept the service agreement and save to use the balance and manual tester. Enable Automatic form verification separately for form submissions.<\/li>\n<li>Use Check connection and balance, then select the forms to validate.<\/li>\n<li>Test your form before relying on the integration in production.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20paid%20plugin%3F\"><h3>Is this a paid plugin?<\/h3><\/dt>\n<dd><p>No. The plugin is GPL software. The remote ZBounce verification service requires a purchased credit package and API key. Current packages are listed at https:\/\/zbounce.net\/pricing.html.<\/p><\/dd>\n<dt id=\"does%20it%20send%20data%20before%20i%20configure%20it%3F\"><h3>Does it send data before I configure it?<\/h3><\/dt>\n<dd><p>No. You must enter an API key and accept the service license agreement at https:\/\/zbounce.net\/license.html for administrative balance\/manual checks. Automatic form checks additionally require enabling Automatic form verification. There is no automatic demo mode.<\/p><\/dd>\n<dt id=\"does%20it%20block%20catch-all%20addresses%3F\"><h3>Does it block catch-all addresses?<\/h3><\/dt>\n<dd><p>By default they pass. Uncheck Risky in Accepted verification results to reject accept-all domains, or Unknown to reject unconfirmed mailboxes. These outcomes are kept separate from missing mailboxes.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20run%20out%20of%20credits%20or%20the%20api%20is%20unavailable%3F\"><h3>What happens if I run out of credits or the API is unavailable?<\/h3><\/dt>\n<dd><p>The result is API unavailable. It passes by default; uncheck API unavailable to reject submissions until verification works again. No successful remote result is fabricated or cached. Check your balance using the settings page.<\/p><\/dd>\n<dt id=\"how%20do%20i%20disable%20all%20remote%20checks%3F\"><h3>How do I disable all remote checks?<\/h3><\/dt>\n<dd><p>Uncheck Automatic form verification and save to stop automatic form checks. Remove license acceptance to stop all API use, including the manual tester and balance. An empty Contact Form 7 selection means all Contact Form 7 forms; other optional form integrations require selecting form IDs.<\/p><\/dd>\n<dt id=\"is%20the%20source%20code%20included%3F\"><h3>Is the source code included?<\/h3><\/dt>\n<dd><p>Yes. PHP, JavaScript and CSS are supplied as readable source. No compiled or minified files are included.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Rename stored settings, cache table, hooks, nonces and the shortcode to the zbounce_eval prefix; existing settings and cache are migrated automatically.<\/li>\n<li>Shortcode is now [zbounce_email_validator].<\/li>\n<li>Translations are delivered through translate.wordpress.org instead of bundled files.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Remove developer error logging and its settings.<\/li>\n<li>Register bundled translations on init using WordPress lazy loading with a legacy fallback.<\/li>\n<li>Limit temporary variables to local scope.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Make admin balance and manual checks available with an accepted agreement and saved key, independently of automatic form verification.<\/li>\n<li>Keep automatic form checks explicitly opt-in.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Keep the connection\/balance refresh button visible beside the balance; disable it until setup is complete.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Always show the balance and email tester at the top of settings, with disabled controls and setup guidance until verification is enabled.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Require explicit acceptance of the ZBounce service license agreement before any API use.<\/li>\n<li>Add an administrator email tester to settings, with an optional cache bypass and policy\/source results.<\/li>\n<li>Display the key balance in settings and refresh it after verification.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Require a purchased ZBounce API key and administrator opt-in before external requests.<\/li>\n<li>Remove automatic demo fallback and public anonymous tester access.<\/li>\n<li>Document external requests, privacy, local storage and paid service requirements.<\/li>\n<li>Sanitize settings, protect direct PHP access and remove personal data from debug logs.<\/li>\n<li>Keep service failures distinct from verification results; clean expired cache entries on writes.<\/li>\n<li>Fix repeated admin tester results and translate its status labels.<\/li>\n<li>Treat transient SMTP failures as undecided, honor shorter API retry TTLs and validate legacy cached results.<\/li>\n<li>Add WordPress personal-data export and erasure for the local cache.<\/li>\n<li>Align plugin metadata and provide a connection\/balance check.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Previous API-key fallback behaviour.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added caching and additional form integrations.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Check form email addresses with the ZBounce service. Requires purchased verification credits and an API key from zbounce.net.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=384784"}],"author":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zbounce"}],"wp:attachment":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384784"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384784"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384784"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384784"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384784"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}