Eu nunca tinha feito um módulo para o NPM, mas gosto muito de NodeJS e sempre que posso tento estudar um pouco. Aproveitei o fato de que a API do SMTP Locaweb tinha acabado de ser lançada para estudar, ao mesmo tempo que entrego algo útil para meu empregador. Foi uma experiência bem interessante e não importa o quão simples seja o código, me apaixono mais por JavaScript e NodeJS a cada dia.
Uma boa prática em qualquer sistema, principalmente web, é lidar com o envio de emails de forma assíncrona, uma vez que o disparo síncrono de mensagens pode causar sérios problemas ao bloquear a execução da sua thread enquanto espera a resposta de um servidor, que pode estar (e passar) há muitos nós de distância na Internet. Se o volume de mensagens crescer, você pode ter um grandes problema de performance. A vantagem de usar NodeJS para o disparo de emails transacionais é que o Node é assíncrono por padrão e você não precisa se preocupar com isso, ficando livre para focar apenas no conteúdo e em quando serão enviadas as mensagens aos seus usuários.
Trata-se de uma biblioteca para facilitar o uso da API do email transacional da Locaweb. Com ela fica muito mais fácil utilizar o serviço.
Instalação
O primeiro passo é instalar a biblioteca. Para isso, use o NPM na pasta raiz do seu aplicativo:
npm i smtp-locaweb-nodejs
Em seguida, também na pasta raiz, crie um arquivo .env com seu token de acesso a API, seguindo o modelo abaixo:
TOKEN=yourAccountToken
O token pode ser encontrado dentro do painel do produto neste link.
Utilização
Após efetuar os passos acima, é hora de importar o módulo em seu código fonte. Para isso, basta utilizar:
var locaweb = require('smtp-locaweb-nodejs');
Daí em diante podemos criar um objeto e-mail utilizando o construtor da biblioteca, definindo os atributos com os métodos na sequência:
var email = new locaweb.Email(); email.addTo('destinatario@email.com'); email.addSubject('Um título bem legal!!!'); email.addFrom('remetente@seudominio.com.br'); email.addBody('O conteúdo da mensagem.'); email.addCc('copia_opcional@email.com'); email.addBcc('bcc_opcional@email.com'); email.addHeaders({Conten-type: 'text/plain'});
Para fazer a requisição à API, basta utilizar o método locaweb.sendmail passando o objeto criado anteriormente:
locaweb.sendMail(email);
Outra opção válida é criar um objeto previamente e utilizá-lo como argumento para gerar um novo objeto da classe e-mail; enviando em seguida, como no exemplo abaixo:
mensagem = { to: ['destinatario1@email.com', 'destinatario2@email.com', 'destinatarioN@email.com'], subject: 'Um título bem legal!!!', from: 'remetente@seudominio.com.br', body: 'O conteúdo da mensagem.', cc: ['copia_opcional@email.com'], } var email = new locaweb.Email(mensagem); locaweb.sendMail(email);
Alguns detalhes que devem ser observados:
- O remetente das mensagem deve ter sido validado anteriormente dentro do painel do produto, caso contrário seria possível enviar uma mensagem em nome de qualquer endereço (e não é isso que queremos, certo?).
- O destinatário da mensagem pode ser tanto uma “string”, quanto um “array” de strings com mais de um endereço.
- Apenas os campos
to
,subject
,body
efrom
, são obrigatórios. - O campo
headers
diz respeito aos headers que serão incluídos no e-mail a ser disparado, não na requisição à API. - As aspas duplas (
"
) em conteúdo HTML devem ser escapadas com uma barra invertida (\
). Caso contrário, o JSON enviado poderá ficar inválido.
Resposta
Caso a requisição à API seja bem sucedida, ela retornará um:
201 Created {status: ok}
com o atributo Location no header. O Location trará a URL com o ID da mensagem enviada, para que você possa fazer a consulta do status da mesma, de forma a saber se ela foi enviada, obteve “bounce” etc.
Por isso mesmo, o método locaweb.sendMail retorna esse valor, de forma que você pode utilizá-lo da maneira como quiser, salvando em uma variável ou armazenando em seu banco de dados, por exemplo.
Conclusão
Como é possível ver, espero que a biblioteca torne a vida de alguns desenvolvedores mais fácil, tornando a tarefa de enviar e-mails transacionais algo trivial.
O código fonte é aberto e está disponível no Github sob a licença MIT.
Feedbacks e pull requests são sempre bem vindos!
Para saber mais sobre a plataforma de e-mails transacionais da Locaweb, consulte a página do produto.
Você também pode consultar a documentação para desenvolvedores no site.