Enviando E-mail com Anexos usando SendGrid and Node.js

November 19, 2019
Escrito por

enviando-email-anexos-com-sendgrid-nodejs.png

Você está enviando emails do seu app em Node.js com a API Twilio SendGrid. Agora você quer anexar arquivos nos seus e-mails e a API Twilio SendGrid faz isso de uma forma bem direta. Neste post, vou anexar um documento pdf a um e-mail enviado através da SendGrid. Se você ainda não enviou nenhum e-mail com nossa API, meu colega Sam escreveu um post sobre isso (artigo em Inglês), ou se você preferir assistir a um vídeo, meu colega Brent publicou um vídeo tutorial. Continuaremos a partir do tutorial do Brent.

Pre-requisitos

Antes de comerçarmos, certifique-se que você tem o seguinte setup:

Configuração

Se você ainda não fez isso, crie sua conta gratuida da SendGrid. Você pode usar o limite gratuito para este tutorial. Uma vez com sua conta, crie uma chave de API (API Key). Você pode fazer isso no momento que desejar, mas certifique-se de guardar a chave para usá-la depois.

Screenshot of API Key Creation in sendgrid

A melhor forma de salvar a chave da API é configurar uma variável de ambiente que possa ser acessada pelo seu código JavaScript, evitando escrevê-la diretamente no seu código. Defina o valor da variável de ambiente SENDGRID_API_KEY para ser a chave da sua conta da SendGrid. Aqui está um tutorial se você precisar de ajuda para configurar variáveis de ambiente. Nós usaremos isso mais tarde.

Enviando um E-mail

Vamos continuar de onde meus colegas pararam na postagem: enviando um e-mail. Você deve ter um arquivo index.js que se parece com isso:

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  subject: 'Enviar com SendGrid é Divertido',
  text: 'e fácil para fazer em qualquer lugar, mesmo com Node.js',
};
sgMail.send(msg).catch(err => {
  console.log(err);
});

Certifique-se de que você instalou a biblioteca Node da Twilio SendGrid. Se você ainda não instlou, execute este comando na pasta do seu projeto.

npm install @sendgrid/mail

Nós usaremos a API Node File System para ler e codificar nosso arquivo como uma string em base64. Eu usei um arquivo fictício attachment.pdf, então certifique-se de substituir o nome do arquivo por um documento que você tenha salvo na mesma pasta do seu arquivo index.js.

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

const fs = require("fs");

pathToAttachment = `${__dirname}/attachment.pdf`;
attachment = fs.readFileSync(pathToAttachment).toString("base64");

const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  subject: 'Enviar com SendGrid é Divertido',
  text: 'e fácil para fazer em qualquer lugar, mesmo com Node.js',
};
sgMail.send(msg).catch(err => {
  console.log(err);
});

Vamos adicionar a propriedade attachments no nosso objeto msg. Nós podemos definir um vetor de objetos para enviar múltiplos arquivos, mas por enquanto enviaremos apenas o arquivo attachment.pdf.

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

const fs = require("fs");

pathToAttachment = `${__dirname}/attachment.pdf`;
attachment = fs.readFileSync(pathToAttachment).toString("base64");

const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  subject: 'Enviar com SendGrid é Divertido',
  text: 'e fácil para fazer em qualquer lugar, mesmo com Node.js',
  attachments: [
    {
      content: attachment,
      filename: "attachment.pdf",
      type: "application/pdf",
      disposition: "attachment"
    }
  ]
};

sgMail.send(msg).catch(err => {
  console.log(err);
});

Antes de executar este código, você precisa confirmar que tem a variável de ambiente SENDGRID_API_KEY e lembrar de substituir o valor da propriedade to com o seu endereço de e-mail, para que seu código funcione corretamente.

Finalmente, salve seu código e rode o seguinte comando no terminal para enviar um e-mail para você mesmo:

node index.js

Confira sua caixa de entrada e você verá algo parecido com isso!

Screenshot of Email with attachment

Resumindo

Agora você pode adicionar anexos aos e-mails que enviar com a Twilio SendGrid, mas você pode fazer muito mais! Você pode responder a e-mails recebidos usando o Webhook para E-mails Recebidos da SendGrid, integrá-lo em um bot inteligente para Facebook Messenger ou até mesmo encaminhar e-mails recebidos em mensagens de texto (artigo em Inglês). Confira também a documentação da SendGrid com muitas outras funcionalidades e usos legais.

Fique a vontade para entrar em contato comigo para tirar dúvidas ou falar sobre as coisas legais que está desenvolvendo. Estou ansioso para ver o que você vai criar!

  • Twitter: @ChatterboxCoder
  • Instagram: @ChatterboxCoder
  • Email: nokenwa@twilio.com