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
- Déposez les fichiers dans
/wp-content/plugins/mailbeam-verify/ - Allez dans Extensions dans votre administration WordPress
- 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.