[Tutorial] - Email sender with Sendgrid on Heroku

Pensando como melhorar algumas plataformas que tenho online encontrei o Sendgrid dentro do nosso velho amigo Heroku.

A Sendgrid é uma plataforma de envio de emails transacionais e de marketing.

Abaixo vão dois links explicando melhor os detalhes:

Agora já conhecendo melhor a plataforma, vamos configurar tudo para criar nossos emails transacionais.

O primeiro passo é provisionar o add-on do Sendgrid dentro do Heroku.

Com o add-on configurado essa é o dashboard da plataforma.

Dentro do dashboard precisamos realizar duas configurações básicas são:

  • 1 - Criar uma api key no dashboard
    Settings > API KEY

  • 2 - Configurar a api key como variável no heroku

Após as configurações básicas precisamos criar e testar um template ainda pelo dashboard

  • Menu de templates

Aqui basta criar o template como preferir, usando a interface de arrasta e solta ou usando HTML

Após criar o template precisamos testar e pra isso na própria plataforma temos um sandbox para enviar o email.

Ao enviar o email via sandbox, podemos conferir a caixa de entrada do email escolhido para receber o teste.

Podemos perceber que a variável user ainda está sem preenchimento. Vamos agora criar o backend para enviar o email de forma transacional.

NodeJs

Para exemplificar o uso da plataforma criei um projeto e estou mantendo no meu github.

Link do repo

Ou você pode ‘deployar’ direto no heroku clicando abaixo

Deploy

A base do código é o que busquei na doc oficial do Sendgrid para nodejs.

Import e configuração da API KEY que criamos anteriormente.

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_APIKEY);

Código base utilizando o template que criamos enviando todos os parametros no request.

app.post("/sendmail/template", function(req, res){
    const {to, from, template_data} = req.body;
    const msg = {
        to: to,
        from: from,
        templateId: 'd-ee4c43022cc74cec802e5398cb54a31f',
        dynamic_template_data: template_data,
    };
    sgMail.send(msg)
    .then((success)=>{
      res.status(200).send({success: "Email enviado com sucesso"});
    }).catch(err=>res.status(400).send({error:"Algo de errado não está certo no envio de emails."})); 
});

Com todo código configurado e rodando localmente vamos aos testes via postman.

Após o teste, podemos perceber que o parametro de usuário foi preenchido de acordo com o request via postman.

Dai pra frente, precisamos criar um template customizado para cada caso e transacionar como preferir. =D