{"id":20642,"date":"2026-09-15T03:52:37","date_gmt":"2026-09-15T03:52:37","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/double-opt-in-with-php-mailgun-2\/"},"modified":"2026-09-15T03:52:37","modified_gmt":"2026-09-15T03:52:37","slug":"double-opt-in-with-php-mailgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/","title":{"rendered":"Double opt-in via PHP avec Mailgun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cr\u00e9er un formulaire d&rsquo;inscription personnalis\u00e9 avec Mailgun est un jeu d&rsquo;enfant. Je re\u00e7ois \u00e9norm\u00e9ment de messages de personnes me demandant un tutoriel pour le faire en PHP, alors le voici. Avant de parler de code, abordons bri\u00e8vement les bonnes pratiques. Si le double opt-in n&rsquo;a plus de secrets pour vous, passez le paragraphe suivant et allez directement \u00e0 la partie technique gr\u00e2ce au sommaire ci-dessous.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-6515\"><p class=\"h5 m-0\" id=\"toc-title-6515\">Table des mati\u00e8res<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#quest-ce-que-le-double-opt-in-et-en-tant-que-developpeur-euse-pourquoi-sen-soucier-9c7b82\">Qu&rsquo;est-ce que le double opt-in et, en tant que d\u00e9veloppeur\u00b7euse, pourquoi s&rsquo;en soucier\u00a0?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#formulaire-html-et-javascript\">Formulaire HTML et Javascript<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#fonctions-php\">Fonctions PHP<\/a><a class=\"scrollme link-body-color\" href=\"#logique-php\">Logique PHP<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Qu&rsquo;est-ce que le double opt-in et, en tant que d\u00e9veloppeur\u00b7euse, pourquoi s&rsquo;en soucier\u00a0?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le processus de double opt-in permet de v\u00e9rifier qu&rsquo;une personne laissant ses coordonn\u00e9es dans le formulaire d&rsquo;inscription \u00e0 la newsletter de votre site web a r\u00e9ellement souhait\u00e9 s&rsquo;y inscrire. Pour ce faire, il demande de reconna\u00eetre et de confirmer que votre adresse email a bien \u00e9t\u00e9 ajout\u00e9e \u00e0 une liste de diffusion sp\u00e9cifique. Comment cela fonctionne-t-il\u00a0? Simplement en vous envoyant un email pour vous demander de confirmer que vous souhaitez r\u00e9ellement recevoir des emails de cet exp\u00e9diteur. Si vous ne confirmez pas votre abonnement (g\u00e9n\u00e9ralement en cliquant sur un lien de confirmation dans un email de confirmation), vous ne devriez jamais recevoir d&#8217;email marketing (ou similaire) de cet exp\u00e9diteur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;\u00e9quipe marketing a appris \u00e0 d\u00e9tester cette pratique, car elle ajoute une \u00e9tape suppl\u00e9mentaire pour atteindre son public, mais il est important de comprendre que sans ce processus, tout le monde pourrait \u00eatre la cible de spams<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sans double opt-in, toute personne connaissant votre adresse email pourrait vous inscrire \u00e0 des milliers de newsletters et de listes marketing en votre nom sans votre consentement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la plupart des pays, c&rsquo;est\u00a0<b>requis par la loi<\/b>,\u00a0mais dans tous les cas, il s&rsquo;agit d&rsquo;une bonne pratique qui prot\u00e8ge votre entreprise des probl\u00e8mes de d\u00e9livrabilit\u00e9 et des plaintes pour abus par email.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Formulaire HTML et Javascript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re chose \u00e0 faire est de cr\u00e9er un formulaire \u00e0 int\u00e9grer sur votre site web. Ce formulaire demandera aux personnes de fournir leurs coordonn\u00e9es, que vous pourrez enregistrer dans une base de donn\u00e9es ou, si la plateforme d&#8217;email le prend en charge, directement sur celle-ci. Mailgun prend en charge cette derni\u00e8re option (<a href=\"http:\/\/documentation.mailgun.com\/api-mailinglists.html\" target=\"_tabs\" rel=\"noopener noreferrer\">et bien plus encore gr\u00e2ce aux param\u00e8tres de variables personnalis\u00e9es<\/a>), vous n&rsquo;avez donc pas \u00e0 vous soucier de configurer une base de donn\u00e9es pour conserver ces informations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le formulaire publiera les donn\u00e9es dans un fichier nomm\u00e9\u00a0<code>contact.php<\/code>\u00a0et contiendra deux champs obligatoires. Vous pouvez \u00e9videmment rendre le champ du nom facultatif ou en ajouter d&rsquo;autres, mais pour les besoins de cet article, nous ferons simple\u00a0!<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    \r\n    \r\n    \r\n    &lt;p&gt;\r\n        &lt;a href=&quot;#&quot;&gt;I&#039;ve read and agree to the Terms of Service &lt;\/a&gt;\r\n        \r\n    &lt;\/p&gt;\r\n    &lt;button type=&quot;submit&quot;&gt;Newsletter Signup&lt;\/button&gt;\r\n    &lt;p&gt;\r\n        &lt;span style=&quot;display: none&quot; id=&quot;pls&quot;&gt; Please review and tick the Terms of Service box&lt;\/span&gt;\r\n    &lt;\/p&gt;\r\n\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Le code Javascript ci-dessous permettra de s&rsquo;assurer que la case a \u00e9t\u00e9 coch\u00e9e avant validation (lors de la soumission), sinon nous ne transmettrons pas l&#8217;email\u00a0!<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                      \r\n    var box = document.getElementById(&quot;chx&quot;);\r\n    var alrt = document.getElementById(&quot;pls&quot;);\r\n\r\nfunction check_the_box(){  \r\n    if(!box.checked) {\r\n        alrt.setAttribute(&quot;style&quot;,&quot;display: inline&quot;);\r\n            return false\r\n}\r\nelse {  \r\n    return true\r\n}\r\n}\r\n \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">N&rsquo;h\u00e9sitez pas \u00e0 ajouter un peu de style au formulaire. Pour l&rsquo;instant, il est tr\u00e8s basique, mais fonctionnel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fonctions PHP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est ici que la partie int\u00e9ressante commence\u00a0: un fichier contenant toutes les fonctions n\u00e9cessaires au fonctionnement du formulaire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici une br\u00e8ve liste de toutes les fonctions cr\u00e9\u00e9es et une explication de ce qu&rsquo;elles font\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>SanitizeInputs()<\/b>\u00a0: cette fonction permet de nettoyer la saisie de tout caract\u00e8re \u00ab\u00a0dommageable\u00a0\u00bb<\/li>\n\n\n\n<li><b>SanitizeEmail()<\/b>\u00a0: identique \u00e0 la pr\u00e9c\u00e9dente, mais effectue une v\u00e9rification regex sur l&rsquo;adresse email. Nous ne voulons pas envoyer d&#8217;emails \u00e0 des adresses mal orthographi\u00e9es, n&rsquo;est-ce pas\u00a0?<\/li>\n\n\n\n<li><b>SendConfirmationEmail()<\/b>\u00a0: envoie un email \u00e0 une adresse email sp\u00e9cifique, en l&rsquo;occurrence celle indiqu\u00e9e par l&rsquo;utilisateur<\/li>\n\n\n\n<li><b>MakeConfirmationHash()<\/b>\u00a0: cr\u00e9e un hash unique bas\u00e9 sur la concat\u00e9nation de l&rsquo;adresse email de l&rsquo;utilisateur et d&rsquo;une cha\u00eene secr\u00e8te. Cette cha\u00eene sera incluse dans l&rsquo;URL sur laquelle l&rsquo;utilisateur doit cliquer pour confirmer qu&rsquo;il souhaite recevoir les emails de notre site. Le summum du double opt-in s\u00e9curis\u00e9.<\/li>\n\n\n\n<li><b>CheckConfirmationHash()<\/b>\u00a0: fonction v\u00e9rifiant que lorsque l&rsquo;utilisateur clique sur le lien de confirmation, le hash contenu dans l&rsquo;URL est valide. C&rsquo;est tr\u00e8s important pour la proc\u00e9dure de double opt-in, sinon n&rsquo;importe qui pourrait v\u00e9rifier l&rsquo;adresse email de quelqu&rsquo;un d&rsquo;autre.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez modifier le texte de l&#8217;email comme bon vous semble. N&rsquo;oubliez pas que vous transmettrez le hash secret, l&rsquo;adresse email et le nom de l&rsquo;utilisateur au script sous forme de param\u00e8tres GET\u00a0!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Alerte de d\u00e9pendance\u00a0: j&rsquo;ai utilis\u00e9 la biblioth\u00e8que PHP officielle de Mailgun disponible sur GitHub<\/b><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    sendMessage($domain, array(\r\n  &#039;from&#039;    =&gt; &#039;confirmation@&#039;.$domain,\r\n  &#039;to&#039;      =&gt; $recipientAddress,\r\n  &#039;subject&#039; =&gt; $subjectText,\r\n  &#039;html&#039;    =&gt; &#039;&lt;p&gt;Hello, please confirm you want to receive marketing emails from &#039;.$domain.&#039; by clicking on the below link &lt;p&gt;&lt;a href=&quot;$siteURL\/contact.php?c=&amp;apos;.$hashedUnique.&amp;apos;&amp;e=&amp;apos;.$recipientAddress.&amp;apos;&amp;n=&amp;apos;.$recipientName.&amp;apos;&quot;&gt;CONFIRMATION&lt;\/a&gt;&lt;\/p&gt;&lt;\/p&gt;&lt;p&gt; This email was sent to&#039;.$recipientName.&#039;, at the speed of a bullet, by Mailgun!&lt;\/a&gt;&#039;\r\n  ));\r\n}\r\n\r\n function MakeConfirmationHash($confEmail, $confCode) {\r\n    return md5($confEmail.$confCode);\r\n }\r\n\r\n function CheckConfirmationHash($confEmail, $confCode) {\r\n    global $uniqueKey;\r\n    if (md5($confEmail.$uniqueKey) === $confCode) { return TRUE; }\r\n        else { return FALSE; }\r\n }\r\n\r\nfunction AddMemberToList($recipientAddress,$recipientName) {\r\n    global $mailingList,$mgClient;\r\n    $result = $mgClient-&gt;post(&quot;lists\/$mailingList\/members&quot;, array(\r\n    &#039;address&#039;     =&gt; $recipientAddress,\r\n    &#039;name&#039;        =&gt; $recipientName,\r\n    &#039;description&#039; =&gt; &#039;Form Opt In&#039;,\r\n    &#039;subscribed&#039;  =&gt; true    \r\n));\r\n}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">Logique PHP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour la section logique, je vais vous expliquer le raisonnement qui sous-tend le code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque l&rsquo;utilisateur saisit son adresse email et son nom dans le champ et soumet le formulaire, voici ce qui se passe\u00a0:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Le script g\u00e9n\u00e8re un code unique et l&rsquo;envoie par email \u00e0 l&rsquo;utilisateur<\/li>\n\n\n\n<li>L&rsquo;utilisateur re\u00e7oit un email avec un lien de confirmation contenant ses informations et le code unique\u00a0: cliquer sur l&#8217;email confirmera qu&rsquo;il accepte que son adresse soit ajout\u00e9e \u00e0 notre liste de diffusion.<\/li>\n\n\n\n<li>Cliquer sur l&rsquo;URL renvoie les informations de l&rsquo;utilisateur, qui sont v\u00e9rifi\u00e9es par rapport au code unique, ce qui d\u00e9clenche son ajout \u00e0 la liste de diffusion sur Mailgun.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Et voil\u00e0, le double opt-in est respect\u00e9, du bon travail\u00a0!<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Dites-moi si vous avez appr\u00e9ci\u00e9 cet article en partageant vos commentaires dans la section ci-dessous ou sur Twitter\u00a0; et si vous aimeriez voir ce tutoriel dans un autre langage de programmation, n&rsquo;h\u00e9sitez pas \u00e0 me le faire savoir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bons envois\u00a0!<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_14a5299968e9645d0a1345d95f8db5a4\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                S&rsquo;inscrire            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_14a5299968e9645d0a1345d95f8db5a4\">\r\n                Lancez-vous, c&rsquo;est facile ! Et c&rsquo;est gratuit.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">D\u00e9couvrez ce que vous pouvez accomplir avec la meilleure plateforme de livraison d\u2019emails au monde.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9er un formulaire d&rsquo;inscription personnalis\u00e9 avec Mailgun est un jeu d&rsquo;enfant. Je re\u00e7ois \u00e9norm\u00e9ment de messages de personnes me demandant un tutoriel pour le faire en PHP, alors le voici.<\/p>\n","protected":false},"author":34,"featured_media":4074,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[20],"class_list":["post-20642","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-email"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu&#039;\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu&#039;\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/\",\"name\":\"Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"datePublished\":\"2026-09-15T03:52:37+00:00\",\"description\":\"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu'\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/email\\\/double-opt-in-with-php-mailgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Double opt-in via PHP avec Mailgun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun","description":"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu'\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/","og_locale":"fr_FR","og_type":"article","og_title":"Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun","og_description":"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu'\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.","og_url":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/","url":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/","name":"Utiliser Mailgun pour le double opt-in via PHP - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","datePublished":"2026-09-15T03:52:37+00:00","description":"Cr\u00e9er des inscriptions par email peut sembler facile, jusqu'\u00e0 ce que vous abordiez le RGPD et les bonnes pratiques en mati\u00e8re de r\u00e9putation. D\u00e9couvrez comment utiliser Mailgun et PHP pour simplifier ce processus.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/fr\/blog\/email\/double-opt-in-with-php-mailgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Double opt-in via PHP avec Mailgun"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/fr\/#website","url":"https:\/\/www.mailgun.com\/fr\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !","publisher":{"@id":"https:\/\/www.mailgun.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/fr\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/20642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/users\/34"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/20642\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media\/4074"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media?parent=20642"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog_category?post=20642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}