Email

Double opt-in via PHP avec Mailgun

Créer un formulaire d'inscription personnalisé avec Mailgun est un jeu d'enfant. Je reçois énormément de messages de personnes me demandant un tutoriel pour le faire en PHP, alors le voici.
Image pour Double opt-in via PHP avec Mailgun

Créer un formulaire d’inscription personnalisé avec Mailgun est un jeu d’enfant. Je reçois énormément de messages de personnes me demandant un tutoriel pour le faire en PHP, alors le voici. Avant de parler de code, abordons brièvement les bonnes pratiques. Si le double opt-in n’a plus de secrets pour vous, passez le paragraphe suivant et allez directement à la partie technique grâce au sommaire ci-dessous.

Qu’est-ce que le double opt-in et, en tant que développeur·euse, pourquoi s’en soucier ?

Le processus de double opt-in permet de vérifier qu’une personne laissant ses coordonnées dans le formulaire d’inscription à la newsletter de votre site web a réellement souhaité s’y inscrire. Pour ce faire, il demande de reconnaître et de confirmer que votre adresse email a bien été ajoutée à une liste de diffusion spécifique. Comment cela fonctionne-t-il ? Simplement en vous envoyant un email pour vous demander de confirmer que vous souhaitez réellement recevoir des emails de cet expéditeur. Si vous ne confirmez pas votre abonnement (généralement en cliquant sur un lien de confirmation dans un email de confirmation), vous ne devriez jamais recevoir d’email marketing (ou similaire) de cet expéditeur.

L’équipe marketing a appris à détester cette pratique, car elle ajoute une étape supplémentaire pour atteindre son public, mais il est important de comprendre que sans ce processus, tout le monde pourrait être la cible de spams

Sans double opt-in, toute personne connaissant votre adresse email pourrait vous inscrire à des milliers de newsletters et de listes marketing en votre nom sans votre consentement.

Dans la plupart des pays, c’est requis par la loi, mais dans tous les cas, il s’agit d’une bonne pratique qui protège votre entreprise des problèmes de délivrabilité et des plaintes pour abus par email.

Formulaire HTML et Javascript

La première chose à faire est de créer un formulaire à intégrer sur votre site web. Ce formulaire demandera aux personnes de fournir leurs coordonnées, que vous pourrez enregistrer dans une base de données ou, si la plateforme d’email le prend en charge, directement sur celle-ci. Mailgun prend en charge cette dernière option (et bien plus encore grâce aux paramètres de variables personnalisées), vous n’avez donc pas à vous soucier de configurer une base de données pour conserver ces informations.

Le formulaire publiera les données dans un fichier nommé contact.php et contiendra deux champs obligatoires. Vous pouvez évidemment rendre le champ du nom facultatif ou en ajouter d’autres, mais pour les besoins de cet article, nous ferons simple !

                                

                                    
    
    
    <p>
        <a href="#">I've read and agree to the Terms of Service </a>
        
    </p>
    <button type="submit">Newsletter Signup</button>
    <p>
        <span style="display: none" id="pls"> Please review and tick the Terms of Service box</span>
    </p>

                                
                            

Le code Javascript ci-dessous permettra de s’assurer que la case a été cochée avant validation (lors de la soumission), sinon nous ne transmettrons pas l’email !

                                

                                      
    var box = document.getElementById("chx");
    var alrt = document.getElementById("pls");

function check_the_box(){  
    if(!box.checked) {
        alrt.setAttribute("style","display: inline");
            return false
}
else {  
    return true
}
}
 
                                
                            

N’hésitez pas à ajouter un peu de style au formulaire. Pour l’instant, il est très basique, mais fonctionnel.

Fonctions PHP

C’est ici que la partie intéressante commence : un fichier contenant toutes les fonctions nécessaires au fonctionnement du formulaire.

Voici une brève liste de toutes les fonctions créées et une explication de ce qu’elles font :

  • SanitizeInputs() : cette fonction permet de nettoyer la saisie de tout caractère « dommageable »
  • SanitizeEmail() : identique à la précédente, mais effectue une vérification regex sur l’adresse email. Nous ne voulons pas envoyer d’emails à des adresses mal orthographiées, n’est-ce pas ?
  • SendConfirmationEmail() : envoie un email à une adresse email spécifique, en l’occurrence celle indiquée par l’utilisateur
  • MakeConfirmationHash() : crée un hash unique basé sur la concaténation de l’adresse email de l’utilisateur et d’une chaîne secrète. Cette chaîne sera incluse dans l’URL sur laquelle l’utilisateur doit cliquer pour confirmer qu’il souhaite recevoir les emails de notre site. Le summum du double opt-in sécurisé.
  • CheckConfirmationHash() : fonction vérifiant que lorsque l’utilisateur clique sur le lien de confirmation, le hash contenu dans l’URL est valide. C’est très important pour la procédure de double opt-in, sinon n’importe qui pourrait vérifier l’adresse email de quelqu’un d’autre.

Vous pouvez modifier le texte de l’email comme bon vous semble. N’oubliez pas que vous transmettrez le hash secret, l’adresse email et le nom de l’utilisateur au script sous forme de paramètres GET !

Alerte de dépendance : j’ai utilisé la bibliothèque PHP officielle de Mailgun disponible sur GitHub

                                

                                    sendMessage($domain, array(
  'from'    => 'confirmation@'.$domain,
  'to'      => $recipientAddress,
  'subject' => $subjectText,
  'html'    => '<p>Hello, please confirm you want to receive marketing emails from '.$domain.' by clicking on the below link <p><a href="$siteURL/contact.php?c=&apos;.$hashedUnique.&apos;&e=&apos;.$recipientAddress.&apos;&n=&apos;.$recipientName.&apos;">CONFIRMATION</a></p></p><p> This email was sent to'.$recipientName.', at the speed of a bullet, by Mailgun!</a>'
  ));
}

 function MakeConfirmationHash($confEmail, $confCode) {
    return md5($confEmail.$confCode);
 }

 function CheckConfirmationHash($confEmail, $confCode) {
    global $uniqueKey;
    if (md5($confEmail.$uniqueKey) === $confCode) { return TRUE; }
        else { return FALSE; }
 }

function AddMemberToList($recipientAddress,$recipientName) {
    global $mailingList,$mgClient;
    $result = $mgClient->post("lists/$mailingList/members", array(
    'address'     => $recipientAddress,
    'name'        => $recipientName,
    'description' => 'Form Opt In',
    'subscribed'  => true    
));
}
                                
                            

Logique PHP

Pour la section logique, je vais vous expliquer le raisonnement qui sous-tend le code.

Lorsque l’utilisateur saisit son adresse email et son nom dans le champ et soumet le formulaire, voici ce qui se passe :

  1. Le script génère un code unique et l’envoie par email à l’utilisateur
  2. L’utilisateur reçoit un email avec un lien de confirmation contenant ses informations et le code unique : cliquer sur l’email confirmera qu’il accepte que son adresse soit ajoutée à notre liste de diffusion.
  3. Cliquer sur l’URL renvoie les informations de l’utilisateur, qui sont vérifiées par rapport au code unique, ce qui déclenche son ajout à la liste de diffusion sur Mailgun.

Et voilà, le double opt-in est respecté, du bon travail !

                                

                                    
                                
                            

Dites-moi si vous avez apprécié cet article en partageant vos commentaires dans la section ci-dessous ou sur Twitter ; et si vous aimeriez voir ce tutoriel dans un autre langage de programmation, n’hésitez pas à me le faire savoir.

Bons envois !