DEV Community

Matheus de Gondra
Matheus de Gondra

Posted on • Updated on

Envio de email com NodeJS e Gmail

Uma dúvida que eu tive há pouco tempo e talvez você também esteja tendo, já que veio até esse post, que é: Como enviar emails na minha aplicação NodeJS?

Fique até o fim desse post que eu te conto.

Iniciando o projeto

Bem vamos começar iniciando um novo projeto Node para começarmos. Vamos criar uma pasta para isso, vou chama-la de node-mail

mkdir node-mail
Enter fullscreen mode Exit fullscreen mode

Com a pasta criado vamos entrar nela e de fato iniciar um projeto node

cd node-mail

npm init -y
Enter fullscreen mode Exit fullscreen mode

Instalando as dependências

Com nosso projeto iniciado, vamos precisar instalar duas dependências que são:

  • express
  • nodemailer
npm i express nodemailer
Enter fullscreen mode Exit fullscreen mode

O express será usado para criarmos a nossa aplicação e o nodemailer será a biblioteca que servirá para enviar emails.

Criando a aplicação

Vamos criar um arquivo index.js. E criar uma aplicação express

const express = require("express");

const app = express();
Enter fullscreen mode Exit fullscreen mode

Em seguida, vou criaremos um rota / apenas para mostrar que a API está funcionando e vou iniciar o app na porta 3000.

app.get("/", (req, res) => {
    return res.json({ API: "OK" });
});

app.listen(3000, () => {
    console.log(`Server is running: http://localhost:3000`)
});
Enter fullscreen mode Exit fullscreen mode

No final nosso index.js deve está assim:

const express = require("express");

const app = express();

app.use(express.json());

app.get("/", (req, res) => {
    return res.json({ API: "OK" });
});

app.listen(3000, () => {
    console.log(`Server is running: http://localhost:3000`)
});
Enter fullscreen mode Exit fullscreen mode

Podemos criar um script start no package.json para rodar a nossa API para testarmos se está tudo funcionando.

{
  "name": "node-mail",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
     "start": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2",
    "nodemailer": "^6.9.1"
  }
}
Enter fullscreen mode Exit fullscreen mode

Depois de rodar o comando npm start e entrar em http://localhost:3000 você deve ver a resposta em JSON da nossa rota

Resposta da API em JSON

Configurando o Gmail

Para esse exemplo vou utilizar o Gmail para enviar nossos emails. Mas para isso vamos precisar configura-lo, pois o Gmail não permite que aplicativos não seguros acessem sua conta.

Primeiro você vai precisar entrar nas configurações de segurança da sua conta do Google. Você pode fazer isso entrando no Google e clicando na sua foto no canto superior direito e depois em Gerenciar sua Conta do Google.

Depois, na esquerda, você entrará na aba Segurança. E irá procurar e ativar a opção de Verificação em duas etapas.

Aba segurança

Ainda na aba de Verificação em duas etapas, no final você terá a opção Senhas de app.

Senhas de app

Aqui vamos criar uma senha para usarmos no nosso app. Selecione a opção Selecionar app e escolha Outro para darmos um novo personalizado e aperte em gerar.

Selecionar app

Irá aparecer um tela com a sua senha gerada copie ela e vamos voltar para o código.

Senha gerada

Utilizando o Nodemailer

Vamos criar o transporter do nodemailer. Crie o arquivo email-service.js

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    service: "gmail",
    auth: {
        user: "seu-email",
        pass: "eiydjkhxannposfr" // senha que geramos no gmail
    }
});

module.exports = transporter;
Enter fullscreen mode Exit fullscreen mode

Com o transporter criado podemos voltar ao index.js e criar uma rota que irá enviar o email

const express = require("express");
// Importando o transporter que criamos no email-service.js
const transporter = require('./email-service');

const app = express();

app.use(express.json());

app.get("/", (req, res) => {
    return res.json({ API: "OK" });
});

// Rota para enviar email
app.get("/send-email", async (req, res) => {
    try {
        const options = {
            from: "seu-email",
            to: "email-destino",
            subject: "Assunto do email",
            text: "Texto do email", // Texto caso o email do usuário não suporte HTML
            html: "<h1>HTML do email</h1>"
        };

        await transporter.sendMail(options);

        return res.json({ message: "Email enviado com sucesso" });
    } catch (error) {
        console.log(error);
        return res.status(500).json(error);
    }
});

app.listen(3000, () => {
    console.log(`Server is running: http://localhost:3000`)
});
Enter fullscreen mode Exit fullscreen mode

Vamos rodar a API com npm start e acessar a rota /send-email. E se tudo der certo teremos a resposta:

Email enviado com sucesso

E se você conferir o email do destinatário verá que o email foi recebido com sucesso!

Top comments (0)