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.
Criaremos um servidor Express que:
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"
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"
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)
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/
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.
Vamos detalhar a implementação passo a passo:
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.
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.
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:
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:
Teste seu webhook usando curl ou Postman:
curl -X POST http://localhost:4000/webhook \ -H "Content-Type: application/json" \ -d '{ "receiver_email": "[email protected]", }'
Problemas e soluções comuns:
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! ?
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