Verificación de email en WordPress
Este tutorial crea un plugin pequeño de WordPress que se engancha al registro de usuarios (y opcionalmente al checkout de WooCommerce) para verificar direcciones de email con Mailbeam. No necesita ninguna dependencia extra: usa el wp_remote_post que ya trae WordPress.
Requisitos previos
- WordPress 6.0+
- PHP 8.1+
- WooCommerce (opcional, para el hook del checkout)
- Una clave de API de Mailbeam (regístrate gratis)
Crea el archivo del plugin
Crea /wp-content/plugins/mailbeam-verify/mailbeam-verify.php:
<?php
/**
* Plugin Name: Mailbeam Email Verify
* Description: Verifica direcciones de email con Mailbeam en el registro de WordPress y 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);
/**
* Verifica una dirección de email con Mailbeam.
* Devuelve el array de la respuesta de la API o null si hay error (falla en abierto).
* Usa los transients de WordPress para cachear (TTL de 1 hora).
*/
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] error de wp_remote_post: ' . $response->get_error_message());
return null; // falla en abierto
}
$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' => __('Usa una dirección de email permanente.', 'mailbeam-verify'),
'no_mx_records' => __('Este dominio no puede recibir correo.', 'mailbeam-verify'),
'smtp_rejected' => __('Esta dirección de email no parece existir.', 'mailbeam-verify'),
default => __('Escribe una dirección de email válida.', 'mailbeam-verify'),
};
}
// ─── Registro de usuarios de 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; // falla en abierto
$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);
// ─── Registro de 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; // falla en abierto
$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);
// ─── Checkout de 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; // falla en abierto
$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');
}
});Configura la clave de API
Añade esto a wp-config.php:
define('MAILBEAM_KEY', 'mb_live_xxxxxxxxxxxxxxxxxxxx');O usa una variable de entorno de tu proveedor de hosting:
define('MAILBEAM_KEY', getenv('MAILBEAM_KEY') ?: '');Activa el plugin
- Súbelo a
/wp-content/plugins/mailbeam-verify/ - Ve a Plugins en tu panel de WordPress
- Activa Mailbeam Email Verify
Pruebas
Intenta registrarte con temp@mailinator.com en /wp-login.php?action=register: deberías ver el mensaje de error. Usa user@valid.mailbeam-test.dev para probar el camino correcto sin consumir cuota.