EmailVerify LogoEmailVerify

WordPress

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

为您的 WordPress 网站添加实时电子邮件验证功能。在联系表单、用户注册和 WooCommerce 结账流程中验证电子邮件。

集成方式

方式最适合复杂度
插件快速设置
Contact Form 7CF7 用户
WPFormsWPForms 用户
自定义 PHP完全控制

方式 1:EmailVerify 插件

安装我们的官方 WordPress 插件,实现最简单的集成。

安装

  1. 前往 插件安装插件
  2. 搜索 "EmailVerify Email Verification"
  3. 点击 现在安装,然后点击 启用
  4. 前往 设置EmailVerify
  5. 输入您的 API 密钥

配置

// wp-config.php (可选)
define('EMAILVERIFY_API_KEY', 'bv_live_xxx');

功能特性

  • 所有表单的实时验证
  • 阻止一次性电子邮件
  • 阻止基于角色的电子邮件
  • 可自定义错误消息
  • WooCommerce 集成
  • AJAX 验证

方式 2:Contact Form 7

为 Contact Form 7 表单添加验证功能。

使用钩子

// 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, '请输入有效的电子邮件地址。');
    }

    if ($verification['result']['disposable']) {
        $result->invalidate($tag, '不允许使用一次性电子邮件。');
    }

    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);
}

表单标签配置

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

方式 3:WPForms

使用自定义验证与 WPForms 集成。

PHP 验证

// 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] =
                    '请输入有效的电子邮件地址。';
            }

            if ($verification['result']['disposable'] ?? false) {
                wpforms()->process->errors[$form_data['id']][$field_id] =
                    '不允许使用一次性电子邮件。';
            }
        }
    }

    return $form_data;
}

方式 4:自定义 PHP 集成

如需完全控制,可直接与我们的 API 集成。

辅助类

<?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);
    }
}

使用方法

$bv = new EmailVerify();

// 基本验证
$result = $bv->verify('user@example.com');

if ($result['data']['status'] === 'valid') {
    // 电子邮件有效
}

// 快速检查
if ($bv->is_valid('user@example.com')) {
    // 处理有效电子邮件
}

if ($bv->is_disposable('user@example.com')) {
    // 阻止一次性电子邮件
}

WordPress 用户注册

在用户注册过程中验证电子邮件。

// 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; // 如果 API 失败,允许注册
    }

    $data = $result['data'];

    if ($data['status'] === 'invalid') {
        $errors->add('invalid_email',
            '<strong>错误</strong>:请输入有效的电子邮件地址。');
    }

    if ($data['result']['disposable'] ?? false) {
        $errors->add('disposable_email',
            '<strong>错误</strong>:不允许使用临时电子邮件地址。');
    }

    return $errors;
}

AJAX 验证

使用 JavaScript 添加实时验证功能。

PHP 端点

// 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' => '电子邮件为必填项']);
    }

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

    if ($result['success']) {
        wp_send_json_success($result['data']);
    } else {
        wp_send_json_error(['message' => '验证失败']);
    }
}

// 加载脚本
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, '请输入有效的电子邮件');
                } else if (data.result && data.result.disposable) {
                    showError($input, '不允许使用一次性电子邮件');
                } 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;
}

缓存

缓存验证结果以减少 API 调用。

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);

    // 缓存 24 小时
    set_transient($cache_key, $result, DAY_IN_SECONDS);

    return $result;
}

最佳实践

1. 优雅降级

如果 API 失败,始终允许表单提交:

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

if (!$result['success']) {
    // 记录错误但不阻止用户
    error_log('EmailVerify API error: ' . $result['error']);
    return; // 允许提交
}

2. 速率限制

通过速率限制防止滥用:

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

    if ($count >= 10) { // 每分钟 10 次验证
        return false;
    }

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

3. 安全性

始终清理和验证输入:

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

if (!is_email($email)) {
    // 格式无效,无需调用 API
    return;
}

相关资源

On this page