"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Crie um serviço de e-mail profissional: Gmail OAuth Express + Webhooks

Crie um serviço de e-mail profissional: Gmail OAuth Express + Webhooks

Publicado em 2024-11-03
Navegar:581

As notificações por e-mail são cruciais para aplicativos da web modernos. Neste guia, construiremos um serviço seguro de notificação por e-mail usando Express.js e autenticação OAuth2 do Gmail. Nosso serviço aceitará solicitações de webhook e enviará e-mails automaticamente com base nos dados recebidos.

O que estamos construindo

Criaremos um servidor Express que:

  • Recebe dados de webhook por meio de solicitações POST
  • Autentica com Gmail usando OAuth2
  • Envia e-mails personalizados com base na carga útil do webhook
  • Lida com erros normalmente

Pré-requisitos

  • Node.js instalado em sua máquina
  • Um projeto do Google Cloud Console com API do Gmail ativada
  • Credenciais OAuth2 (ID do cliente, segredo do cliente, token de atualização)
  • Compreensão básica de Express.js e async/await

Configuração do projeto

Primeiro, instale os pacotes necessários:

npm install express body-parser nodemailer googleapis dotenv

Crie um arquivo .env com suas credenciais:

CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
REDIRECT_URI=your_redirect_uri
REFRESH_TOKEN=your_refresh_token
[email protected]

Se você encontrar alguma dificuldade ao configurar essas credenciais, como eu fiz, siga as etapas abaixo...

Etapa 1: crie um novo projeto do Google Cloud:

um. Vá para https://console.cloud.google.com/
b. Clique no menu suspenso do projeto na parte superior da página
c. Clique em "Novo Projeto"
d. Digite um nome de projeto e clique em "Criar"

Build a Professional Email Service: Gmail OAuth Express   Webhooks

Etapa 2: Habilite a API do Gmail:
um. Na barra lateral esquerda, vá em "APIs e Serviços" > "Biblioteca"
b. Pesquise por "API do Gmail"
c. Clique em "API do Gmail" e depois em "Ativar"

Build a Professional Email Service: Gmail OAuth Express   Webhooks


Etapa 3: configurar a tela de consentimento do OAuth:
um. Vá para "APIs e serviços" > "Tela de consentimento do OAuth"
b. Escolha "Externo" como tipo de usuário e clique em "Criar"
c. Preencha os campos obrigatórios:
- Nome do aplicativo: [Nome do seu aplicativo]
- E-mail de suporte ao usuário: [Seu e-mail]
- Informações de contato do desenvolvedor: [Seu e-mail]
d. Clique em "Salvar e continuar"
e. Na página "Escopos", clique em "Adicionar ou remover escopos"
f. Encontre e selecione o escopo "https://mail.google.com/"
g. Clique em "Atualizar" e depois em "Salvar e continuar"
h. Na página "Usuários de teste", clique em "Adicionar usuários"
eu. Adicione seu endereço do Gmail e clique em "Salvar e continuar"
j. Revise o resumo e clique em "Voltar ao painel"


Etapa 4: Criar credenciais OAuth2:
um. Vá para "APIs e serviços" > "Credenciais"
b. Clique em "Criar credenciais" > "ID do cliente OAuth"
c. Escolha "Aplicativo Web" como o tipo de aplicativo
d. Nome: [Nome do seu aplicativo]
e. Origens JavaScript autorizadas: adicione o domínio do seu servidor (por exemplo, http://localhost:3000 para desenvolvimento local)
Build a Professional Email Service: Gmail OAuth Express   Webhooks
f. URIs de redirecionamento autorizados:
- Adicionar: https://developers.google.com/oauthplayground
- Adicione o URL de retorno de chamada do seu servidor, se tiver um (por exemplo, http://localhost:3000/auth/google/callback)
g. Clique em "Criar"
h. Um pop-up mostrará seu ID do cliente e segredo do cliente. Salve-os com segurança.


Etapa 5: Obtenha um novo token de atualização:
um. Acesse https://developers.google.com/oauthplayground/

Build a Professional Email Service: Gmail OAuth Express   Webhooks

b. Clique no ícone de engrenagem (como configurações) no canto superior direito
c. Clique na caixa de seleção "Usar suas próprias credenciais OAuth"
d. Insira seu novo ID do cliente e segredo do cliente
e. Feche as configurações
f. Na barra lateral esquerda, encontre "Gmail API v1"
g. Selecione https://mail.google.com/
h. Clique em "Autorizar APIs"
eu. Escolha sua conta Google e conceda as permissões solicitadas
j. Na próxima tela, clique em "Código de autorização de troca por tokens"
k. Copie o "token de atualização" da resposta

Se você encontrar algum problema durante esse processo ou ao testar a funcionalidade do e-mail, forneça nos comentários as mensagens de erro ou o comportamento específico que você está vendo.


O Código Explicado

Vamos detalhar a implementação passo a passo:

1. Configuração inicial e dependências

const express = require("express");
const bodyParser = require("body-parser");
const nodemailer = require("nodemailer");
const { google } = require("googleapis");
require("dotenv").config();

const app = express();
app.use(bodyParser.json());

Esta seção configura nosso servidor Express e importa as dependências necessárias. Usamos body-parser para analisar solicitações JSON e dotenv para gerenciar variáveis ​​de ambiente.

2. Configuração OAuth2

const oAuth2Client = new google.auth.OAuth2(
  CLIENT_ID,
  CLIENT_SECRET,
  REDIRECT_URI
);
oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });

Criamos um cliente OAuth2 usando a biblioteca de autenticação do Google. Isso trata da atualização e autenticação do token com a API do Gmail.

3. Função de envio de e-mail

async function sendEmail(webhookData) {
  const {
    receiver_email, //change data based on your needs
  } = webhookData;

  try {
    const accessToken = await oAuth2Client.getAccessToken();
    const transport = nodemailer.createTransport({
      service: "gmail",
      auth: {
        type: "OAuth2",
        user: process.env.EMAIL_USER,
        clientId: CLIENT_ID,
        clientSecret: CLIENT_SECRET,
        refreshToken: REFRESH_TOKEN,
        accessToken: accessToken,
      },
    });

    const mailOptions = {
      from: `Your Name `,
      to: receiver_email,
      subject: ``, //Add Subject of Email
      html: ``, // Add your HTML template here
    };

    return await transport.sendMail(mailOptions);
  } catch (error) {
    console.error("Error in sendMail function:", error);
    throw error;
  }
}

Esta função:

  • Extrai dados da carga útil do webhook, você pode modificar a carga útil com base nas necessidades
  • Obtém um novo token de acesso
  • Cria um transporte com autenticação OAuth2
  • Envia o e-mail com conteúdo personalizado

4. Ponto final do webhook

app.post("/webhook", async (req, res) => {
  try {
    const webhookData = req.body;
    await sendEmail(webhookData);
    res.status(200).send("Email sent successfully");
  } catch (error) {
    console.error("Error processing webhook:", error);
    res.status(500).send("Error processing webhook");
  }
});

Nosso ponto de extremidade do webhook:

  • Recebe solicitações POST
  • Processa os dados do webhook
  • Envia e-mails
  • Retorna respostas apropriadas

Teste

Teste seu webhook usando curl ou Postman:

curl -X POST http://localhost:4000/webhook \
-H "Content-Type: application/json" \
-d '{
  "receiver_email": "[email protected]",
}'

Solução de problemas

Problemas e soluções comuns:

  1. Erros de autenticação: verifique suas credenciais OAuth2
  2. Expiração do token: certifique-se de que o token de atualização seja válido
  3. Dados ausentes: validar carga útil do webhook

Conclusão

Agora você tem um sistema de notificação por e-mail seguro e autenticado pelo OAuth2! Esta implementação fornece uma base sólida para a construção de sistemas de notificação mais complexos, mantendo a segurança e a confiabilidade.

Espero que esta postagem seja útil para você configurar o serviço de e-mail.

Boa codificação! ?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/yashrajxdev/build-a-professional-email-service-gmail-oauth2-express-webhooks-2gp8?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3