EmailVerify LogoEmailVerify

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: EmailVerify-plugin

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

Installatie

  1. Ga naar PluginsAdd New
  2. Zoek naar "EmailVerify Email Verification"
  3. Klik op Install Now en daarna Activate
  4. Ga naar SettingsEmailVerify
  5. Voer uw API-sleutel in

Configuratie

// wp-config.php (optional)
define('EMAILVERIFY_API_KEY', 'bv_live_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*', 'emailverify_cf7_validation', 20, 2);

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

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

    $verification = emailverify_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 emailverify_check_email($email) {
    $api_key = defined('EMAILVERIFY_API_KEY')
        ? EMAILVERIFY_API_KEY
        : get_option('emailverify_api_key');

    $response = wp_remote_post('https://api.emailverify.ai/v1/verify', [
        'headers' => [
            'Authorization' => 'Bearer ' . $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:emailverify-email]

Methode 3: WPForms

Integreer met WPForms met behulp van aangepaste validatie.

PHP-validatie

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

function emailverify_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 = emailverify_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-emailverify.php

class EmailVerify {
    private $api_key;
    private $api_url = 'https://api.emailverify.ai/v1';

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

    public function verify($email) {
        $response = wp_remote_post($this->api_url . '/verify', [
            'headers' => [
                'Authorization' => 'Bearer ' . $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 EmailVerify();

// 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', 'emailverify_registration_check', 10, 3);

function emailverify_registration_check($errors, $sanitized_user_login, $user_email) {
    $bv = new EmailVerify();
    $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', 'emailverify_ajax_verify');
add_action('wp_ajax_nopriv_verify_email', 'emailverify_ajax_verify');

function emailverify_ajax_verify() {
    check_ajax_referer('emailverify_nonce', 'nonce');

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

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

    $bv = new EmailVerify();
    $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', 'emailverify_enqueue_scripts');

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

    wp_localize_script('emailverify', 'emailverify_ajax', [
        'url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('emailverify_nonce'),
    ]);
}

JavaScript

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

        if (!email) return;

        $input.addClass('verifying');

        $.post(emailverify_ajax.url, {
            action: 'verify_email',
            nonce: emailverify_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 emailverify_check_email_cached($email) {
    $cache_key = 'bv_email_' . md5($email);
    $cached = get_transient($cache_key);

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

    $result = emailverify_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('EmailVerify API error: ' . $result['error']);
    return; // Allow submission
}

2. Rate limiting

Voorkom misbruik met rate limiting:

function emailverify_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