Aller au contenu

Refuser dans WordPress les inscriptions d'adresses mortes

Intégration Formulaires et sites

Ajoutez à WordPress une extension indispensable qui vérifie chaque nouvelle inscription avec PricklyMails et refuse les adresses qui ne reçoivent pas d'emails.

Pas besoin de connecteur : à chaque inscription, WordPress appelle l'API PricklyMails depuis le filtre registration_errors, et une adresse qui ne peut pas recevoir d'emails est refusée avant que le compte n'existe.

Vérifier gratuitement

Pas à pas

Vérifier chaque inscription en quatre étapes

Avant de commencer

Un accès aux fichiers du site, pour modifier wp-config.php et ajouter un fichier dans wp-content : une extension indispensable se dépose sous forme de fichier, elle ne s'installe pas depuis le tableau de bord.

  1. Dans PricklyMails

    Créer une clé API dans PricklyMails

    1. Dans le tableau de bord, ouvrez Clés API et cliquez sur Nouvelle clé.
    2. À l'étape Environnement, choisissez d'abord Test : la clé commence par pm_test_, répond par des résultats prédéfinis, ne facture rien et ne contacte aucun serveur de messagerie.
    3. Copiez la clé dès qu'elle s'affiche : elle n'est montrée qu'une fois.

    Astuce

    L'offre Free ne compte qu'une clé : une fois que tout fonctionne, révoquez la clé de test, puis créez-en une en Production.

  2. Dans WordPress

    Ranger la clé et ajouter l'extension dans WordPress

    La clé va dans wp-config.php, sous forme de constante, et le code dans une extension indispensable (must-use plugin), que WordPress exécute sans activation et qu'on ne peut pas désactiver depuis le tableau de bord.

    1. Ouvrez wp-config.php, à la racine des fichiers de WordPress.
    2. Juste au-dessus de la ligne « C'est tout, ne touchez pas à ce qui suit ! » (That's all, stop editing! dans un fichier en anglais), ajoutez define( 'PRICKLYMAILS_KEY', 'pm_test_votre_cle' );, avec votre clé de test pour valeur.
    3. Dans wp-content, créez un dossier mu-plugins, s'il n'existe pas déjà.
    4. Enregistrez-y le code ci-dessous sous le nom pricklymails-signup-check.php.

    Le code demande à PricklyMails de répondre en quelques secondes (Prefer: wait) et cesse d'attendre peu après, pour qu'une inscription ne reste jamais suspendue à la réponse. Il ne refuse l'inscription que si la recommandation est remove, et la laisse passer sinon : adresse risquée, pas de réponse à temps, erreur.

    wp-content/mu-plugins/pricklymails-signup-check.php
    <?php
    /**
     * Plugin Name: PricklyMails signup check
     */
    
    defined( 'ABSPATH' ) || exit;
    
    function pricklymails_refusal() {
        return __( 'This email address cannot receive mail.', 'pricklymails' ) . ' '
            . __( 'Check it for a typo, or use another one.', 'pricklymails' );
    }
    
    // The person waits at the form: wait 4 for the answer, give up at 5.
    function pricklymails_recommendation( $email ) {
        $response = wp_remote_post(
            'https://api.pricklymails.com/api/verify',
            array(
                'timeout' => 5,
                'headers' => array(
                    'Authorization' => 'Bearer ' . PRICKLYMAILS_KEY,
                    'Content-Type' => 'application/json',
                    'Prefer' => 'wait=4',
                ),
                'body' => wp_json_encode( array( 'email' => $email ) ),
            )
        );
        if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
            return null;
        }
        $result = json_decode( wp_remote_retrieve_body( $response ), true );
    
        return $result['verification']['recommendation'] ?? null;
    }
    
    function pricklymails_check_signup( $errors, $user_login, $user_email ) {
        // A signup WordPress already refused costs no verification.
        if ( $errors->has_errors() || ! defined( 'PRICKLYMAILS_KEY' ) ) {
            return $errors;
        }
        if ( 'remove' === pricklymails_recommendation( $user_email ) ) {
            $errors->add( 'user_email', pricklymails_refusal() );
        }
    
        return $errors;
    }
    add_filter( 'registration_errors', 'pricklymails_check_signup', 10, 3 );
    
    Comment l'API répond en un seul appel

    Attention

    Si wp-config.php met WP_HTTP_BLOCK_EXTERNAL à true, WordPress n'envoie de requêtes qu'à votre propre site et aux hôtes listés dans WP_ACCESSIBLE_HOSTS : ajoutez-y api.pricklymails.com, sinon le code n'atteint jamais PricklyMails et laisse passer toutes les inscriptions.

    À noter

    Laissez le fichier directement dans mu-plugins : WordPress ne charge pas les fichiers de ses sous-dossiers.

    SourceAide officielle de WordPress
  3. Dans WordPress

    Ouvrir les inscriptions dans WordPress

    Une extension indispensable ne s'active pas : WordPress l'exécute dès que le fichier est en place. Reste à permettre aux visiteurs de créer un compte, et à vérifier que WordPress voit l'extension.

    1. Dans le tableau de bord, ouvrez Réglages puis Général.
    2. Sous Inscription, cochez Tout le monde peut s'inscrire.
    3. Cliquez sur Enregistrer les modifications.
    4. Ouvrez Extensions et cliquez sur Indispensable, au-dessus de la liste.
    5. Vérifiez que PricklyMails signup check y figure.

    Astuce

    Le formulaire d'inscription se trouve à l'adresse wp-login.php?action=register de votre site : c'est là que se fait l'essai de l'étape suivante.

    À noter

    Votre administration est en anglais ? Ces menus s'y appellent Settings puis General, Membership, Anyone can register, Save Changes, Plugins et Must-Use, comme dans la documentation citée, rédigée en anglais.

    SourceAide officielle de WordPress
  4. Dans WordPress

    Essayer avec la clé de test

    1. Inscrivez-vous avec une adresse qui commence par invalid, comme invalid@example.com : la clé de test répond remove, et l'inscription est refusée.
    2. Inscrivez-vous avec une autre adresse, comme valid@example.com : le compte est créé.
    3. Là où vous avez rangé la clé, remplacez-la par une clé créée en Production, qui commence par pm_live_ : dès lors, chaque inscription est vérifiée pour de vrai et facturée comme toute vérification.

Ce que devient chaque inscription

Le code lit la recommandation que l'API donne pour l'adresse, la même que dans le rapport d'une liste.

À retirer

Refusée : l'adresse n'existe pas, son domaine ne peut pas recevoir d'emails, ou elle est jetable.

WordPress ne crée pas le compte et affiche de nouveau le formulaire d'inscription, avec le message dans un avis d'erreur au-dessus. Le message s'affiche tel que le code l'écrit, en anglais : remplacez ses deux phrases par les vôtres si votre site est en français. Une extension qui modifie par le filtre login_errors les avis du formulaire de connexion modifie aussi celui-ci, puisque le formulaire d'inscription partage cette page.

À revoir

Acceptée : domaine qui accepte toutes les adresses, adresse générique comme contact@, ou serveur qui n'a pas répondu. L'adresse peut fonctionner.

À envoyer

Acceptée : l'adresse est valide, ou hébergée chez un grand fournisseur qui accepte toutes les adresses.

Pas de réponse à temps
WordPress attend la fin du filtre avant de créer le compte, sans délai maximal de sa part, pendant que la personne attend devant le formulaire. Le code demande à PricklyMails de répondre en 4 secondes, cesse d'attendre au bout de 5, le timeout de sa requête, puis laisse passer l'inscription.
SourceAide officielle de WordPress

Questions fréquentes

Le code vérifie-t-il les inscriptions faites par WooCommerce ?

Pas tel quel : WordPress n'exécute registration_errors que pour son propre formulaire d'inscription, et les formulaires de WooCommerce passent par leur propre filtre, woocommerce_registration_errors, que son bloc Checkout prend aussi en charge. Pour vérifier aussi ces inscriptions, ajoutez cette ligne à la fin du fichier : add_filter( 'woocommerce_registration_errors', 'pricklymails_check_signup', 10, 3 );.

Le code fonctionne-t-il sur un réseau multisite ?

Avec un filtre de plus. Sur un réseau, les inscriptions passent par wp-signup.php, qui les valide avec le filtre wpmu_validate_user_signup à la place, et le fichier de mu-plugins s'exécute sur tous les sites. Accrochez à ce filtre une fonction qui passe les clés errors, user_name et user_email du tableau à pricklymails_check_signup, puis renvoie le tableau : le message s'affiche sous le champ de l'adresse, puisque le code le range sous user_email. Pour ouvrir les inscriptions, allez dans Admin du réseau puis Réglages et, sous Autoriser les nouvelles inscriptions, choisissez Des comptes peuvent être créés.

SourceAide officielle de WordPress

Une inscription que WordPress refuse de lui-même coûte-t-elle une vérification ?

Non. WordPress vérifie l'identifiant et l'adresse avant d'exécuter le filtre, et le code s'arrête sans appeler PricklyMails quand l'un de ces contrôles a échoué : adresse vide ou mal formée, adresse ou identifiant déjà enregistrés.

SourceAide officielle de WordPress

Existe-t-il une extension PricklyMails pour WordPress ?

Non, et il n'y a rien à installer : le code ci-dessus appelle l'API PricklyMails avec votre clé.

Ces marques appartiennent à leurs propriétaires respectifs. Les citer n'implique aucun partenariat.

Vérifiez votre liste avant votre prochain envoi.

1 000 jetons offerts à l'inscription, sans carte bancaire. Ensuite, vous ne payez que les réponses.