Email

Opt in doble mediante PHP con Mailgun

Crear un formulario de registro personalizado con Mailgun puede ser muy sencillo. Recibo muchos mensajes de personas que me piden que escriba un tutorial sobre cómo hacer esto en PHP, así que aquí lo tienes.
Imagen para Opt in doble mediante PHP con Mailgun

Crear un formulario de registro personalizado con Mailgun puede ser muy sencillo. Recibo muchos mensajes de personas que me piden que escriba un tutorial sobre cómo hacer esto en PHP, así que aquí lo tienes. Antes de hablar de código, hablemos brevemente de las mejores prácticas. Si ya lo sabes todo sobre el opt in doble, sáltate el siguiente párrafo y pasa a la parte técnica usando el índice a continuación.

¿Qué es el opt in doble y por qué debería importarme si me dedico a la programación?

Un proceso de opt in doble es una forma de verificar que, cuando una persona deja sus datos en el formulario de registro de la newsletter de tu sitio web, realmente se ha suscrito. Esto se logra pidiéndote que reconozcas y confirmes que tu dirección de email se ha añadido a una lista de correo específica. ¿Cómo lo hace? Simplemente enviándote un email y pidiéndote que confirmes que realmente quieres recibir emails de ese remitente. Si no confirmas tu suscripción (normalmente haciendo clic en un enlace de confirmación dentro de un email de confirmación), nunca deberías recibir un email de marketing (o similar) de ese remitente.

A los profesionales del marketing suele no gustarles esta práctica, ya que añade un paso más para llegar a su audiencia, pero es importante entender que, sin este proceso, cualquiera podría ser blanco de spam de emails no solicitados

Sin el opt in doble, cualquier persona que conozca tu dirección de email podría suscribirte a miles de newsletters y listas de marketing en tu nombre sin tu consentimiento.

En la mayoría de los países, esto es obligatorio por ley pero, de cualquier forma, creo que es una de las mejores prácticas y protege a tu negocio frente a problemas de entregabilidad y quejas por abuso de email.

Formulario HTML y Javascript

Lo primero que querrás hacer es crear un formulario para ubicarlo en algún lugar de tu sitio web. Este formulario pedirá a las personas sus datos, que podrás guardar en una base de datos o, si es compatible, dentro de la propia plataforma de email. Mailgun es compatible con esto último (y aún más al usar parámetros de variables personalizadas), por lo que no tienes que preocuparte por configurar una base de datos para almacenar esta información.

El formulario enviará los datos a un archivo llamado contact.php y tendrá dos campos obligatorios. Obviamente, puedes hacer que el campo del nombre no sea obligatorio o añadir más campos pero, para el propósito de este artículo, lo mantendremos sencillo.

                                

                                    
    
    
    <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>

                                
                            

Al usar el siguiente código Javascript nos aseguraremos de que la casilla se haya marcado antes de la validación (al enviar el formulario); de lo contrario, no se procesará el 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
}
}
 
                                
                            

Añade algo de estilo al formulario si quieres. Por ahora es muy básico, pero funcional.

Funciones de PHP

Aquí empieza la parte interesante: un archivo que contiene todas las funciones necesarias para que el formulario funcione.

Aquí tienes una breve lista de todas las funciones creadas y una explicación de lo que hacen:

  • SanitizeInputs(): esta función se usa para limpiar los datos introducidos de cualquier carácter “dañino”
  • SanitizeEmail(): igual que la anterior pero, en su lugar, realiza una comprobación de expresiones regulares en la dirección de email, ya que no queremos enviar emails a direcciones mal escritas, ¿verdad?
  • SendConfirmationEmail(): envía un email a una dirección de email específica, en nuestro caso es la dirección de email introducida en el formulario
  • MakeConfirmationHash(): crea un hash único basado en la concatenación de una cadena de la dirección de email introducida y una cadena secreta. Esta cadena se enviará como parte de la URL en la que se debe hacer clic para verificar que se desea recibir emails de nuestro sitio web. Una fantástica forma de asegurar el opt in doble.
  • CheckConfirmationHash(): una función que comprueba que, al hacer clic en el enlace de confirmación, el hash contenido en la URL es válido. Esto es muy importante para el procedimiento del opt in doble, de lo contrario, cualquiera podría verificar la dirección de email de otra persona.

Puedes cambiar el texto del email como quieras. Ten en cuenta que volverás a pasar el hash secreto, la dirección de email y el nombre de la persona al script como parámetros GET.

Alerta de dependencia: he utilizado la biblioteca oficial de Mailgun para PHP disponible en 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    
));
}
                                
                            

Lógica de PHP

Para la sección de la lógica, explicaré el razonamiento detrás del código.

Cuando alguien introduce su dirección de email y su nombre en la casilla y envía el formulario, ocurre lo siguiente:

  1. El script genera un código único y lo envía por email a esa persona
  2. La persona recibe un email con un enlace de confirmación que contiene su información y un código único: al hacer clic en el email, confirma que está de acuerdo con que su dirección forme parte de nuestra lista de correo.
  3. Hacer clic en la URL devuelve los datos de la persona, que se cotejan con el código único y activan su incorporación a la lista de correo en Mailgun.

Y eso es todo, opt in doble respetado, ¡un buen trabajo!

                                

                                    
                                
                            

Dime si te ha gustado este artículo compartiendo tus ideas en la sección de comentarios a continuación o en Twitter; y si te gustaría ver este tutorial en un lenguaje de programación diferente, házmelo saber.

¡Feliz envío!