Email

Entrega de e-mail agendada com Mailgun e Node.js

De autoria de Timothy Voice, profissional de desenvolvimento de software em Brooklyn e entusiasta do MEAN.JS. Esta publicação foi feita originalmente em seu blog.
Imagem para Entrega de e-mail agendada com Mailgun e Node.js

Esta é uma versão atualizada da publicação “Entrega de e-mail agendada com Mailgun e Node.js” escrita por Timothy Voice, profissional de desenvolvimento de software em Brooklyn e entusiasta do MEAN.JS. A publicação original foi feita primeiramente em seu blog.

Normalmente, ninguém gosta de coisas maldosas, ou “mean” em inglês (a não ser que seja o filme Meninas Malvadas, talvez). No entanto, há algumas coisas “mean” que podem ser muito úteis. Uma delas é o aplicativo MEAN (MongoDB, Express.js, AngularJS e Node.js), que permite criar sites e aplicativos móveis. Quer saber mais? Vamos nos aprofundar.

O que é entrega de e-mail agendada?

A entrega de e-mail agendada é uma invenção bem recente, mas que rapidamente se popularizou quando o assunto é mensagens de e-mail. É comum na maioria dos principais provedores de serviços de internet, como Microsoft Outlook, Gmail e Yahoo, e permite atrasar a entrega das suas mensagens para um momento posterior. Ao redigir uma mensagem, você pode querer que ela seja entregue em um horário específico, em vez de ser enviada imediatamente. O agendamento de e-mails permite que você mantenha as mensagens na caixa de saída até que decida enviá-las. Simples, não é?

Por que as pessoas agendam e-mails para mais tarde?

As pessoas enviam e-mails por diversos motivos (confie na gente, nós sabemos). Às vezes, se os colegas de trabalho colaboram em fusos horários diferentes, pode ser interessante atrasar a entrega até que os destinatários tenham começado o dia de trabalho, para que o e-mail seja uma das primeiras coisas que eles vejam. Em outros casos, as pessoas podem querer adiar a entrega quando têm ideias ou tarefas que desejam acompanhar mais tarde. A capacidade de atrasar o envio por um período específico permite que elas se lembrem do que desejam realizar com um novo e-mail. 

Claro, a entrega de e-mail agendada não acontece sozinha. Então, onde entra o MEAN?

Por que o MEAN é importante para a entrega de e-mail agendada?

No que se refere a recursos, o incrível aplicativo MEAN que você criou pode ajudar a enviar e-mails transacionais para dar suporte ao serviço em geral, como confirmações de e-mail, senhas esquecidas, notificações e afins; o que, obviamente, inclui opções de entrega de e-mail. Há uma categoria de aplicativos em que o e-mail é o serviço, como aplicativos de clima, entrega de newsletters etc., e é aí que a entrega de e-mail agendada entra em cena. Para esses serviços, precisamos que nosso aplicativo envie e-mails para a base de usuários automaticamente em horários definidos e sob certas condições. Combinando alguns ótimos módulos do npm e conectando a um serviço de e-mail, isso pode ser alcançado rapidamente.

Como configurar o MEAN com o Mailgun para conseguir a entrega de e-mail agendada?

Para adicionar a funcionalidade de e-mail agendado ao seu aplicativo MEAN, siga as etapas abaixo.

Você precisará de quatro funções: uma função mailUsers para selecionar destinatários, uma função mailCreator para gerar o e-mail a partir de um modelo, uma função mailScheduler para disparar o envio em um determinado horário e uma função mailSender para enviar os e-mails.

A configuração

Requisite os módulos do Node e inclua o Nunjucks para poder adicionar variáveis aos seus modelos de e-mail em HTML.

Consulta à base de usuários

Estamos usando a consulta find(x).where(y) do Mongoose para filtrar a base de usuários e encontrar quem selecionou receber notificações no dia determinado e retornar uma promise.

O criador de e-mails

A função mailCreator recebe uma matriz de pessoas da base de usuários e gera outra matriz que contém os endereços de e-mail delas e o modelo HTML renderizado pelo Nunjucks.

O Mailer

A função mailSender receberá um e-mail de usuário, assunto e modelo em HTML para nosso e-mail e retornará uma promise que, quando resolvida, contém a resposta da API do Mailgun; algo como “Queued. Thank you”.

O agendador

Aqui, sua função de agendador recebe o trabalho que queremos realizar e o executa quando a variável de regra e a descrição da regra determinam. Por exemplo: usando um node-scheduler todos os dias para agendar o envio diário às 16:38. Veja aqui sobre a criação de regras de recorrência no node-scheduler.

Juntando todas as peças

Agora, tudo que você precisa fazer é chamar a função do agendador dentro do controlador de nodes de entrega, repassando a base de usuários que sua consulta retornou, sua função geradora de e-mail e a função remetente. Você pode encontrar todo o sistema em um único controlador de Node aqui. Veja um exemplo de chamada de envio agendado:

Agora, você tem um controlador que encontrará quem selecionou receber notificações em um determinado horário na base de usuários e enviará um e-mail quando o job-scheduler disparar.

Esse controlador permitirá aplicar regras de envio, gerenciar a entrega e muito mais. Por meio dessa integração do aplicativo MEAN, você poderá agendar e-mails com facilidade.

Conclusão

Embora entender as nuances da entrega de e-mail agendada possa ser complicado, o uso da integração de um aplicativo MEAN com o Mailgun pode ajudar a assumir o controle de seu agendamento de e-mails e enviá-los exatamente quando for necessário. E isso é bem barro.