Email

Duplo opt-in via PHP com o Mailgun

Criar um formulário de assinatura personalizado com o Mailgun pode ser muito simples. Recebo várias mensagens de pessoas me pedindo para escrever um tutorial sobre como fazer isso em PHP, então aqui está.
Imagem para Duplo opt-in via PHP com o Mailgun

Criar um formulário de assinatura personalizado com o Mailgun pode ser muito simples. Recebo várias mensagens de pessoas me pedindo para escrever um tutorial sobre como fazer isso em PHP, então aqui está. Antes de falar sobre código, vamos discutir brevemente algumas práticas recomendadas. Se você já sabe tudo sobre duplo opt-in, pule o próximo parágrafo e avance para a parte de engenharia usando o índice abaixo.

O que é duplo opt-in e, como profissional de desenvolvimento, por que isso importa?

O processo de duplo opt-in é uma forma de verificar se, quando uma pessoa deixa seus dados no formulário de assinatura da newsletter no seu site, ela realmente solicitou o cadastro. Para isso, pede-se que você reconheça e confirme que seu endereço de e-mail foi adicionado a uma determinada lista de e-mails. Como isso funciona? Simplesmente enviando um e-mail para você e pedindo para confirmar se realmente deseja receber e-mails daquele remetente. Se não confirmar a assinatura (geralmente clicando em um link contido no e-mail de confirmação), você nunca receberá um e-mail de marketing (ou semelhante) daquele remetente.

Profissionais de marketing passaram a não gostar dessa prática, pois ela adiciona uma etapa extra para alcançar o seu público. No entanto, é importante entender que, sem esse processo, qualquer pessoa poderia ser alvo de spam não solicitado por e-mail.

Sem o duplo opt-in, qualquer pessoa que saiba o seu endereço de e-mail poderia assinar milhares de newsletters e listas de marketing em seu nome, sem o seu consentimento.

Na maioria dos países, isso é exigido por lei, mas, de qualquer forma, acredito que seja uma das práticas recomendadas e protege o seu negócio contra problemas de entregabilidade e denúncias de abuso de e-mail.

Formulário HTML e Javascript

A primeira coisa que você precisará fazer é criar um formulário para colocar em algum lugar no seu site. Esse formulário solicitará os dados das pessoas para que você possa salvar em um banco de dados ou, se compatível, na própria plataforma de e-mail. O Mailgun oferece suporte à segunda opção (e muito mais ao usar parâmetros de variável personalizados), então você não precisa se preocupar em configurar um banco de dados para armazenar esses dados.

O formulário fará a postagem em um arquivo chamado contact.php e terá dois campos obrigatórios. Você pode obviamente tornar o campo de nome opcional ou adicionar outros, mas, para o propósito deste artigo, vamos manter tudo simples!

                                

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

                                
                            

O uso do código Javascript abaixo garantirá que a caixa de seleção seja marcada antes da validação (no envio), caso contrário, não daremos seguimento com o e-mail!

                                

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

Fique à vontade para adicionar algum estilo ao formulário. No momento, ele é muito básico, mas funcional.

Funções do PHP

A parte interessante começa aqui: um arquivo contendo todas as funções necessárias para fazer o formulário funcionar.

Aqui está uma breve lista de todas as funções criadas e uma explicação do que elas fazem:

  • SanitizeInputs(): Essa função é usada para limpar a entrada de qualquer caractere “prejudicial”
  • SanitizeEmail(): O mesmo que a função acima, mas, em vez disso, executa uma verificação de regex no endereço de e-mail. Não queremos enviar e-mails para endereços com erros de ortografia, não é mesmo?
  • SendConfirmationEmail(): Envia um e-mail para um endereço de e-mail especificado. No nosso caso, é o endereço de e-mail especificado pelo usuário
  • MakeConfirmationHash(): Cria um hash exclusivo baseado na concatenação de strings do endereço de e-mail do usuário e uma string secreta. Essa string será enviada como parte do URL que o usuário precisa clicar para confirmar se deseja receber e-mails do nosso site. Toda a grandiosidade de um duplo opt-in seguro.
  • CheckConfirmationHash(): Uma função que verifica se, quando o usuário clica no link de confirmação, o hash contido no URL é válido. Isso é muito importante para o procedimento de duplo opt-in, caso contrário, qualquer pessoa poderia verificar os endereços de e-mail de outras.

Você pode alterar o texto do e-mail como desejar. Tenha em mente que você passará o hash secreto, o endereço de e-mail e o nome do usuário de volta para o script como parâmetros GET!

Alerta de dependência: usei a biblioteca php oficial do mailgun disponível no 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 do PHP

Na seção de lógica, vou explicar o raciocínio por trás do código.

Quando o usuário insere o seu endereço de e-mail e nome no campo e envia o formulário, acontece o seguinte:

  1. O script gera um código exclusivo e o envia por e-mail para o usuário
  2. O usuário recebe um e-mail com um link de confirmação, contendo informações sobre ele e um código exclusivo: clicar no e-mail confirmará que ele concorda com a inclusão de seu endereço na nossa lista de e-mails.
  3. Clicar no URL envia de volta os detalhes do usuário, que são verificados com base no código exclusivo, e atua como o gatilho para a adição à lista de e-mails no Mailgun.

E é isso, duplo opt-in respeitado e um trabalho bem-feito!

                                

                                    
                                
                            

Diga se você gostou deste artigo compartilhando a sua opinião na caixa de comentários abaixo ou no Twitter. Se adoraria ver este tutorial em uma linguagem de programação diferente, é só falar.

Bons envios!