Beta privataMailbeam è in beta privata: l'API pubblica non è ancora aperta.Iscriviti alla lista d'attesa

Mailbeam
WordPress + PHPBase20 minutiAggiornato a gennaio 2025

Verifica delle email in WordPress

Questo tutorial crea un piccolo plugin di WordPress che si aggancia alla registrazione degli utenti (e, se vuoi, al checkout di WooCommerce) per verificare gli indirizzi email con Mailbeam. Non serve alcuna dipendenza in più: usa il wp_remote_post che WordPress porta già con sé.

Prerequisiti

  • WordPress 6.0+
  • PHP 8.1+
  • WooCommerce (facoltativo, per l'hook del checkout)
  • Una chiave API di Mailbeam (iscriviti gratis)

Crea il file del plugin

Crea /wp-content/plugins/mailbeam-verify/mailbeam-verify.php:

<?php
/**
 * Plugin Name: Mailbeam Email Verify
 * Description: Verifica gli indirizzi email con Mailbeam nella registrazione di WordPress e 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 un indirizzo email con Mailbeam.
 * Restituisce l'array della risposta dell'API oppure null in caso di errore (lascia passare).
 * Usa i transient di WordPress per la cache (TTL di 1 ora).
 */
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] errore di wp_remote_post: ' . $response->get_error_message());
        return null; // lascia passare
    }

    $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 un indirizzo email permanente.', 'mailbeam-verify'),
        'no_mx_records'     => __('Questo dominio non può ricevere posta.', 'mailbeam-verify'),
        'smtp_rejected'     => __('Questo indirizzo email non sembra esistere.', 'mailbeam-verify'),
        default             => __('Inserisci un indirizzo email valido.', 'mailbeam-verify'),
    };
}

// ─── Registrazione utenti di 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; // lascia passare

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

// ─── Registrazione di 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; // lascia passare

    $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 di 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; // lascia passare

    $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 chiave API

Aggiungi questo a wp-config.php:

define('MAILBEAM_KEY', 'mb_live_xxxxxxxxxxxxxxxxxxxx');

Oppure usa una variabile d'ambiente del tuo fornitore di hosting:

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

Attiva il plugin

  1. Caricalo in /wp-content/plugins/mailbeam-verify/
  2. Vai su Plugin nel tuo pannello di WordPress
  3. Attiva Mailbeam Email Verify

Prove

Prova a registrarti con temp@mailinator.com su /wp-login.php?action=register: dovresti vedere il messaggio di errore. Usa user@valid.mailbeam-test.dev per provare il percorso corretto senza consumare quota.

Prossimi passi