BillionVerify LogoBillionVerify

WordPress

Email checker for WordPress. Verify emails in contact forms, WooCommerce, and user registration.

Voeg realtime e-mailverificatie toe aan uw WordPress-site. Valideer e-mails in contactformulieren, registratie en WooCommerce-checkout.

Integratiemethoden

MethodeBeste voorComplexiteit
PluginSnelle setupLaag
Contact Form 7CF7-gebruikersLaag
WPFormsWPForms-gebruikersLaag
Aangepaste PHPVolledige controleGemiddeld

Methode 1: BillionVerify-plugin

Installeer onze officiële WordPress-plugin voor de eenvoudigste integratie.

Installatie

  1. Ga naar Plugins → Add New
  2. Zoek naar "BillionVerify Email Verification"
  3. Klik op Install Now en daarna Activate
  4. Ga naar Settings → BillionVerify
  5. Voer uw API-sleutel in

Configuratie

// wp-config.php (optional)
define('BV_API_KEY', 'sk_xxx');

Functies

  • Realtime verificatie op alle formulieren
  • Blokkeer wegwerp-e-mails
  • Blokkeer rol-gebaseerde e-mails
  • Aanpasbare foutmeldingen
  • WooCommerce-integratie
  • AJAX-validatie

Methode 2: Contact Form 7

Voeg verificatie toe aan Contact Form 7-formulieren.

Hooks gebruiken

// functions.php
add_filter('wpcf7_validate_email*', 'billionverify_cf7_validation', 20, 2);

function billionverify_cf7_validation($result, $tag) {
    $email = isset($_POST[$tag->name]) ? sanitize_email($_POST[$tag->name]) : '';

    if (empty($email)) {
        return $result;
    }

    $verification = billionverify_check_email($email);

    if ($verification['status'] === 'invalid') {
        $result->invalidate($tag, 'Please enter a valid email address.');
    }

    if ($verification['result']['disposable']) {
        $result->invalidate($tag, 'Disposable emails are not allowed.');
    }

    return $result;
}

function billionverify_check_email($email) {
    $api_key = defined('BV_API_KEY')
        ? BV_API_KEY
        : get_option('billionverify_api_key');

    $response = wp_remote_post('https://api.billionverify.com/v1/verify/single', [
        'headers' => [
            'BV-API-KEY' => $api_key,
            'Content-Type' => 'application/json',
        ],
        'body' => json_encode(['email' => $email]),
        'timeout' => 10,
    ]);

    if (is_wp_error($response)) {
        return ['status' => 'unknown'];
    }

    return json_decode(wp_remote_retrieve_body($response), true);
}

Formuliertag-configuratie

[email* your-email class:billionverify-email]

Methode 3: WPForms

Integreer met WPForms met behulp van aangepaste validatie.

PHP-validatie

// functions.php
add_filter('wpforms_process_before_form_data', 'billionverify_wpforms_validation', 10, 2);

function billionverify_wpforms_validation($form_data, $entry) {
    foreach ($entry['fields'] as $field_id => $value) {
        $field = $form_data['fields'][$field_id] ?? null;

        if ($field && $field['type'] === 'email' && !empty($value)) {
            $verification = billionverify_check_email($value);

            if ($verification['status'] === 'invalid') {
                wpforms()->process->errors[$form_data['id']][$field_id] =
                    'Please enter a valid email address.';
            }

            if ($verification['result']['disposable'] ?? false) {
                wpforms()->process->errors[$form_data['id']][$field_id] =
                    'Disposable emails are not allowed.';
            }
        }
    }

    return $form_data;
}

Methode 4: Aangepaste PHP-integratie

Voor volledige controle, integreer rechtstreeks met onze API.

Helper-klasse

<?php
// includes/class-billionverify.php

class BillionVerify {
    private $api_key;
    private $api_url = 'https://api.billionverify.com/v1';

    public function __construct($api_key = null) {
        $this->api_key = $api_key ?: get_option('billionverify_api_key');
    }

    public function verify($email) {
        $response = wp_remote_post($this->api_url . '/verify', [
            'headers' => [
                'BV-API-KEY' => $this->api_key,
                'Content-Type' => 'application/json',
            ],
            'body' => json_encode(['email' => $email]),
            'timeout' => 10,
        ]);

        if (is_wp_error($response)) {
            return [
                'success' => false,
                'error' => $response->get_error_message(),
            ];
        }

        $body = json_decode(wp_remote_retrieve_body($response), true);
        return [
            'success' => true,
            'data' => $body,
        ];
    }

    public function is_valid($email) {
        $result = $this->verify($email);
        return $result['success'] && $result['data']['status'] === 'valid';
    }

    public function is_disposable($email) {
        $result = $this->verify($email);
        return $result['success'] && ($result['data']['result']['disposable'] ?? false);
    }
}

Gebruik

$bv = new BillionVerify();

// Basic verification
$result = $bv->verify('user@example.com');

if ($result['data']['status'] === 'valid') {
    // Email is valid
}

// Quick checks
if ($bv->is_valid('user@example.com')) {
    // Process valid email
}

if ($bv->is_disposable('user@example.com')) {
    // Block disposable email
}

WordPress-registratie

Verifieer e-mails tijdens gebruikersregistratie.

// functions.php
add_filter('registration_errors', 'billionverify_registration_check', 10, 3);

function billionverify_registration_check($errors, $sanitized_user_login, $user_email) {
    $bv = new BillionVerify();
    $result = $bv->verify($user_email);

    if (!$result['success']) {
        return $errors; // Allow registration if API fails
    }

    $data = $result['data'];

    if ($data['status'] === 'invalid') {
        $errors->add('invalid_email',
            '<strong>Error</strong>: Please enter a valid email address.');
    }

    if ($data['result']['disposable'] ?? false) {
        $errors->add('disposable_email',
            '<strong>Error</strong>: Temporary email addresses are not allowed.');
    }

    return $errors;
}

AJAX-validatie

Voeg realtime validatie toe met JavaScript.

PHP-endpoint

// functions.php
add_action('wp_ajax_verify_email', 'billionverify_ajax_verify');
add_action('wp_ajax_nopriv_verify_email', 'billionverify_ajax_verify');

function billionverify_ajax_verify() {
    check_ajax_referer('billionverify_nonce', 'nonce');

    $email = sanitize_email($_POST['email'] ?? '');

    if (empty($email)) {
        wp_send_json_error(['message' => 'Email is required']);
    }

    $bv = new BillionVerify();
    $result = $bv->verify($email);

    if ($result['success']) {
        wp_send_json_success($result['data']);
    } else {
        wp_send_json_error(['message' => 'Verification failed']);
    }
}

// Enqueue scripts
add_action('wp_enqueue_scripts', 'billionverify_enqueue_scripts');

function billionverify_enqueue_scripts() {
    wp_enqueue_script('billionverify',
        get_template_directory_uri() . '/js/billionverify.js',
        ['jquery'],
        '1.0.0',
        true
    );

    wp_localize_script('billionverify', 'billionverify_ajax', [
        'url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('billionverify_nonce'),
    ]);
}

JavaScript

// js/billionverify.js
jQuery(function($) {
    $('input[type="email"]').on('blur', function() {
        var $input = $(this);
        var email = $input.val();

        if (!email) return;

        $input.addClass('verifying');

        $.post(billionverify_ajax.url, {
            action: 'verify_email',
            nonce: billionverify_ajax.nonce,
            email: email
        })
        .done(function(response) {
            $input.removeClass('verifying');

            if (response.success) {
                var data = response.data;

                if (data.status === 'invalid') {
                    showError($input, 'Please enter a valid email');
                } else if (data.result && data.result.disposable) {
                    showError($input, 'Disposable emails not allowed');
                } else {
                    showSuccess($input);
                }
            }
        })
        .fail(function() {
            $input.removeClass('verifying');
        });
    });

    function showError($input, message) {
        $input.addClass('error').removeClass('valid');
        $input.next('.bv-message').remove();
        $input.after('<span class="bv-message error">' + message + '</span>');
    }

    function showSuccess($input) {
        $input.addClass('valid').removeClass('error');
        $input.next('.bv-message').remove();
        $input.after('<span class="bv-message valid">✓</span>');
    }
});

CSS

/* style.css */
input[type="email"].verifying {
    background-image: url('spinner.gif');
    background-position: right 10px center;
    background-repeat: no-repeat;
}

input[type="email"].error {
    border-color: #dc3545;
}

input[type="email"].valid {
    border-color: #28a745;
}

.bv-message {
    display: block;
    font-size: 12px;
    margin-top: 4px;
}

.bv-message.error {
    color: #dc3545;
}

.bv-message.valid {
    color: #28a745;
}

Caching

Cache verificatieresultaten om API-calls te verminderen.

function billionverify_check_email_cached($email) {
    $cache_key = 'bv_email_' . md5($email);
    $cached = get_transient($cache_key);

    if ($cached !== false) {
        return $cached;
    }

    $result = billionverify_check_email($email);

    // Cache for 24 hours
    set_transient($cache_key, $result, DAY_IN_SECONDS);

    return $result;
}

Best practices

1. Graceful degradation

Sta altijd formulierinzending toe als de API faalt:

$result = $bv->verify($email);

if (!$result['success']) {
    // Log the error but don't block the user
    error_log('BillionVerify API error: ' . $result['error']);
    return; // Allow submission
}

2. Rate limiting

Voorkom misbruik met rate limiting:

function billionverify_rate_limit($email) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $key = 'bv_rate_' . md5($ip);
    $count = get_transient($key) ?: 0;

    if ($count >= 10) { // 10 verifications per minute
        return false;
    }

    set_transient($key, $count + 1, MINUTE_IN_SECONDS);
    return true;
}

3. Beveiliging

Sanitize en valideer altijd invoer:

$email = sanitize_email($_POST['email']);

if (!is_email($email)) {
    // Invalid format, no need to call API
    return;
}

Gerelateerde bronnen

On this page