Bêta privéeMailbeam est en bêta privée : l'API publique n'est pas encore ouverte.Rejoindre la liste d'attente

Mailbeam
WordPress + PHPDébutant20 minutesMis à jour en janvier 2025

Vérification d'e-mails dans WordPress

Ce tutoriel crée une petite extension WordPress qui se branche sur l'inscription des utilisateurs (et, en option, sur le paiement WooCommerce) pour vérifier les adresses via Mailbeam. Aucune dépendance supplémentaire : elle utilise le wp_remote_post intégré à WordPress.

Prérequis

  • WordPress 6.0+
  • PHP 8.1+
  • WooCommerce (facultatif, pour le hook de paiement)
  • Une clé d'API Mailbeam (inscription gratuite)

Créer le fichier de l'extension

Créez /wp-content/plugins/mailbeam-verify/mailbeam-verify.php :

<?php
/**
 * Plugin Name: Mailbeam Email Verify
 * Description: Vérifie les adresses e-mail via Mailbeam à l'inscription WordPress et WooCommerce.
 * Version: 1.0.0
 * Requires PHP: 8.1
 */

if (!defined('ABSPATH')) exit;

define('MAILBEAM_API_KEY', defined('MAILBEAM_KEY') ? MAILBEAM_KEY : '');
define('MAILBEAM_MIN_SCORE', 60);

/**
 * Vérifie une adresse e-mail via Mailbeam.
 * Renvoie le tableau de réponse de l'API, ou null en cas d'erreur (échec permissif).
 * Utilise les transients WordPress comme cache (TTL d'une heure).
 */
function mailbeam_verify(string $email): ?array
{
    $cacheKey = 'mb_' . md5(strtolower(trim($email)));
    $cached = get_transient($cacheKey);
    if ($cached !== false) return $cached;

    $response = wp_remote_post('https://api.mailbeam.dev/v1/verify', [
        'timeout' => 5,
        'headers' => [
            'Authorization' => 'Bearer ' . MAILBEAM_API_KEY,
            'Content-Type'  => 'application/json',
        ],
        'body' => wp_json_encode(['email' => $email]),
    ]);

    if (is_wp_error($response)) {
        error_log('[Mailbeam] erreur wp_remote_post : ' . $response->get_error_message());
        return null; // échec permissif
    }

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

    if (!is_array($data)) return null;

    set_transient($cacheKey, $data, HOUR_IN_SECONDS);
    return $data;
}

function mailbeam_get_error_message(?string $reason): string
{
    return match ($reason) {
        'disposable_domain' => __('Merci d\'utiliser une adresse e-mail permanente.', 'mailbeam-verify'),
        'no_mx_records'     => __('Ce domaine ne peut pas recevoir de courrier.', 'mailbeam-verify'),
        'smtp_rejected'     => __('Cette adresse e-mail ne semble pas exister.', 'mailbeam-verify'),
        default             => __('Merci de saisir une adresse e-mail valide.', 'mailbeam-verify'),
    };
}

// ─── Inscription WordPress ────────────────────────────────────────────────────

add_filter('registration_errors', function (WP_Error $errors, string $sanitized_user_login, string $user_email) {
    if (!$user_email || $errors->has_errors()) return $errors;

    $result = mailbeam_verify($user_email);
    if ($result === null) return $errors; // échec permissif

    $valid = $result['valid'] ?? false;
    $score = $result['score'] ?? 0;
    $reason = $result['reason'] ?? null;

    if (!$valid || $score < MAILBEAM_MIN_SCORE) {
        $errors->add('mailbeam_invalid_email', mailbeam_get_error_message($reason));
    }

    return $errors;
}, 10, 3);

// ─── Inscription WooCommerce ──────────────────────────────────────────────────

add_action('woocommerce_register_post', function (string $username, string $email, WP_Error $errors) {
    if (!$email || $errors->has_errors()) return;

    $result = mailbeam_verify($email);
    if ($result === null) return; // échec permissif

    $valid = $result['valid'] ?? false;
    $score = $result['score'] ?? 0;
    $reason = $result['reason'] ?? null;

    if (!$valid || $score < MAILBEAM_MIN_SCORE) {
        $errors->add('mailbeam_invalid_email', mailbeam_get_error_message($reason));
    }
}, 10, 3);

// ─── Paiement WooCommerce ─────────────────────────────────────────────────────

add_action('woocommerce_checkout_process', function () {
    $email = isset($_POST['billing_email']) ? sanitize_email($_POST['billing_email']) : '';
    if (!$email) return;

    $result = mailbeam_verify($email);
    if ($result === null) return; // échec permissif

    $valid = $result['valid'] ?? false;
    $score = $result['score'] ?? 0;
    $reason = $result['reason'] ?? null;

    if (!$valid || $score < MAILBEAM_MIN_SCORE) {
        wc_add_notice(mailbeam_get_error_message($reason), 'error');
    }
});

Configurer la clé d'API

Ajoutez ceci à wp-config.php :

define('MAILBEAM_KEY', 'mb_live_xxxxxxxxxxxxxxxxxxxx');

Ou passez par une variable d'environnement fournie par votre hébergeur :

define('MAILBEAM_KEY', getenv('MAILBEAM_KEY') ?: '');

Activer l'extension

  1. Déposez les fichiers dans /wp-content/plugins/mailbeam-verify/
  2. Allez dans Extensions dans votre administration WordPress
  3. Activez Mailbeam Email Verify

Tester

Essayez de vous inscrire avec temp@mailinator.com sur /wp-login.php?action=register : le message d'erreur doit apparaître. Utilisez user@valid.mailbeam-test.dev pour tester le chemin nominal sans consommer de quota.

Prochaines étapes