EmailVerify LogoEmailVerify

WordPress

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

WordPress サイトに EmailVerify を統合して、フォーム送信、ユーザー登録、コメントでメールアドレスを検証しましょう。

連携方法

方法最適な用途複雑さ
プラグイン一般的なフォーム
カスタムコード高度な連携
Zapierノーコード自動化

方法 1:プラグイン連携

一般的なフォームプラグインとの連携

Contact Form 7

Contact Form 7 に検証を追加:

// functions.php に追加
add_filter('wpcf7_validate_email*', 'emailverify_validate_email', 20, 2);

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

    if ($email) {
        $verification = emailverify_check_email($email);

        if ($verification['status'] === 'invalid') {
            $result->invalidate($tag, '有効なメールアドレスを入力してください。');
        }

        if ($verification['result']['disposable']) {
            $result->invalidate($tag, '一時的なメールアドレスは使用できません。');
        }
    }

    return $result;
}

Gravity Forms

Gravity Forms への連携:

add_filter('gform_field_validation', 'emailverify_gf_validation', 10, 4);

function emailverify_gf_validation($result, $value, $form, $field) {
    if ($field->type === 'email' && $result['is_valid']) {
        $email = is_array($value) ? $value[0] : $value;
        $verification = emailverify_check_email($email);

        if ($verification['status'] === 'invalid') {
            $result['is_valid'] = false;
            $result['message'] = '有効なメールアドレスを入力してください。';
        }

        if ($verification['result']['disposable']) {
            $result['is_valid'] = false;
            $result['message'] = '一時的なメールアドレスは使用できません。';
        }
    }

    return $result;
}

WPForms

WPForms への連携:

add_filter('wpforms_process_validate_email', 'emailverify_wpforms_validation', 10, 3);

function emailverify_wpforms_validation($field_id, $field_submit, $form_data) {
    $email = $field_submit['value'];
    $verification = emailverify_check_email($email);

    if ($verification['status'] === 'invalid') {
        wpforms()->process->errors[$form_data['id']][$field_id] = '有効なメールアドレスを入力してください。';
    }

    if ($verification['result']['disposable']) {
        wpforms()->process->errors[$form_data['id']][$field_id] = '一時的なメールアドレスは使用できません。';
    }
}

方法 2:カスタム API 連携

ヘルパー関数の作成

// functions.php に追加

define('EMAILVERIFY_API_KEY', 'YOUR_API_KEY');

function emailverify_check_email($email) {
    // キャッシュをチェック
    $cache_key = 'bv_' . md5($email);
    $cached = get_transient($cache_key);

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

    // API 呼び出し
    $response = wp_remote_post('https://api.emailverify.ai/v1/verify', [
        'headers' => [
            'Authorization' => 'Bearer ' . EMAILVERIFY_API_KEY,
            'Content-Type' => 'application/json',
        ],
        'body' => json_encode(['email' => $email]),
        'timeout' => 10,
    ]);

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

    $body = json_decode(wp_remote_retrieve_body($response), true);

    // 結果をキャッシュ(24 時間)
    set_transient($cache_key, $body, DAY_IN_SECONDS);

    return $body;
}

ユーザー登録での検証

add_filter('registration_errors', 'emailverify_registration_check', 10, 3);

function emailverify_registration_check($errors, $sanitized_user_login, $user_email) {
    $verification = emailverify_check_email($user_email);

    if ($verification['status'] === 'invalid') {
        $errors->add('invalid_email', '<strong>エラー</strong>: 有効なメールアドレスを入力してください。');
    }

    if (isset($verification['result']['disposable']) && $verification['result']['disposable']) {
        $errors->add('disposable_email', '<strong>エラー</strong>: 一時的なメールアドレスでは登録できません。');
    }

    return $errors;
}

コメント送信での検証

add_filter('preprocess_comment', 'emailverify_comment_check');

function emailverify_comment_check($commentdata) {
    $email = $commentdata['comment_author_email'];

    if (!empty($email)) {
        $verification = emailverify_check_email($email);

        if ($verification['status'] === 'invalid' ||
            (isset($verification['result']['disposable']) && $verification['result']['disposable'])) {
            wp_die('有効なメールアドレスでコメントを送信してください。');
        }
    }

    return $commentdata;
}

方法 3:AJAX リアルタイム検証

JavaScript(フロントエンド)

// assets/js/email-verify.js

jQuery(document).ready(function($) {
    let verifyTimeout;
    const emailInputs = $('input[type="email"]');

    emailInputs.on('blur', function() {
        const $input = $(this);
        const email = $input.val();

        if (!email || !isValidEmailFormat(email)) {
            return;
        }

        clearTimeout(verifyTimeout);

        verifyTimeout = setTimeout(function() {
            verifyEmail($input, email);
        }, 500);
    });

    function verifyEmail($input, email) {
        const $status = getStatusElement($input);

        $status.html('<span class="bv-loading">確認中...</span>');

        $.ajax({
            url: bvAjax.ajaxUrl,
            type: 'POST',
            data: {
                action: 'emailverify_check',
                email: email,
                nonce: bvAjax.nonce,
            },
            success: function(response) {
                if (response.success) {
                    if (response.data.valid) {
                        $status.html('<span class="bv-valid">✓ メール確認済み</span>');
                        $input.removeClass('bv-invalid').addClass('bv-valid');
                    } else {
                        $status.html('<span class="bv-invalid">✗ ' + response.data.message + '</span>');
                        $input.removeClass('bv-valid').addClass('bv-invalid');
                    }
                }
            },
            error: function() {
                $status.html('');
            }
        });
    }

    function getStatusElement($input) {
        let $status = $input.next('.bv-status');
        if (!$status.length) {
            $status = $('<div class="bv-status"></div>');
            $input.after($status);
        }
        return $status;
    }

    function isValidEmailFormat(email) {
        return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
    }
});

PHP(AJAX ハンドラー)

// functions.php に追加

// スクリプトをエンキュー
add_action('wp_enqueue_scripts', 'emailverify_enqueue_scripts');

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

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

// AJAX ハンドラー
add_action('wp_ajax_emailverify_check', 'emailverify_ajax_check');
add_action('wp_ajax_nopriv_emailverify_check', 'emailverify_ajax_check');

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

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

    if (!is_email($email)) {
        wp_send_json_error(['message' => '無効なメール形式です']);
    }

    $verification = emailverify_check_email($email);

    if ($verification['status'] === 'invalid') {
        wp_send_json_success([
            'valid' => false,
            'message' => '有効なメールアドレスを入力してください',
        ]);
    }

    if (isset($verification['result']['disposable']) && $verification['result']['disposable']) {
        wp_send_json_success([
            'valid' => false,
            'message' => '一時的なメールアドレスは使用できません',
        ]);
    }

    wp_send_json_success(['valid' => true]);
}

CSS スタイル

/* assets/css/email-verify.css */

.bv-status {
    margin-top: 5px;
    font-size: 14px;
}

.bv-loading {
    color: #666;
}

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

.bv-invalid {
    color: #dc3545;
}

input.bv-valid {
    border-color: #28a745 !important;
}

input.bv-invalid {
    border-color: #dc3545 !important;
}

WooCommerce 連携

チェックアウトでの検証

add_action('woocommerce_checkout_process', 'emailverify_checkout_validation');

function emailverify_checkout_validation() {
    $email = $_POST['billing_email'];
    $verification = emailverify_check_email($email);

    if ($verification['status'] === 'invalid') {
        wc_add_notice('有効なメールアドレスを入力してください。', 'error');
    }

    if (isset($verification['result']['disposable']) && $verification['result']['disposable']) {
        wc_add_notice('一時的なメールアドレスは使用できません。恒久的なメールアドレスを使用してください。', 'error');
    }
}

注文メタデータに検証結果を保存

add_action('woocommerce_checkout_order_processed', 'emailverify_save_verification', 10, 1);

function emailverify_save_verification($order_id) {
    $order = wc_get_order($order_id);
    $email = $order->get_billing_email();
    $verification = emailverify_check_email($email);

    update_post_meta($order_id, '_email_verification_status', $verification['status']);
    update_post_meta($order_id, '_email_verification_score', $verification['score'] ?? '');
}

ベストプラクティス

1. API エラーを適切に処理

function emailverify_check_email($email) {
    // ... API 呼び出し ...

    if (is_wp_error($response)) {
        // API エラー時は許可(重要なフォーム送信をブロックしない)
        error_log('EmailVerify API error: ' . $response->get_error_message());
        return [
            'status' => 'unknown',
            'result' => ['disposable' => false],
        ];
    }

    // ...
}

2. レスポンスをキャッシュ

// Transients API を使用してキャッシュ
$cache_key = 'bv_' . md5($email);
set_transient($cache_key, $result, DAY_IN_SECONDS);

3. API キーを安全に保管

// wp-config.php で定義
define('EMAILVERIFY_API_KEY', 'YOUR_API_KEY');

// または環境変数を使用
define('EMAILVERIFY_API_KEY', getenv('EMAILVERIFY_API_KEY'));

4. ユーザーに適切なフィードバックを提供

// 無効なメールの場合
'有効なメールアドレスを入力してください。'

// 使い捨てメールの場合
'一時的なメールアドレスでは登録できません。恒久的なメールアドレスを使用してください。'

// 不明なステータスの場合
'メールを確認できませんでした。入力内容をご確認ください。'

関連リソース

On this page