Las notificaciones por correo electrónico son cruciales para las aplicaciones web modernas. En esta guía, crearemos un servicio de notificación por correo electrónico seguro utilizando Express.js y la autenticación OAuth2 de Gmail. Nuestro servicio aceptará solicitudes de webhooks y enviará correos electrónicos automáticamente en función de los datos entrantes.
Crearemos un servidor Express que:
Primero, instale los paquetes requeridos:
npm install express body-parser nodemailer googleapis dotenv
Crea un archivo .env con tus credenciales:
CLIENT_ID=your_client_id CLIENT_SECRET=your_client_secret REDIRECT_URI=your_redirect_uri REFRESH_TOKEN=your_refresh_token [email protected]
Si tiene dificultades para configurar estas credenciales, como lo hice yo, puede seguir los pasos a continuación...
Paso 1: crear un nuevo proyecto de Google Cloud:
a. Vaya a https://console.cloud.google.com/
b. Haga clic en el menú desplegable del proyecto en la parte superior de la página
do. Haga clic en "Nuevo proyecto"
d. Ingrese un nombre de proyecto y haga clic en "Crear"
Paso 2: Habilite la API de Gmail:
a. En la barra lateral izquierda, vaya a "API y servicios" > "Biblioteca"
b. Busque "API de Gmail"
do. Haga clic en "API de Gmail" y luego haga clic en "Activar"
Paso 3: Configurar la pantalla de consentimiento de OAuth:
a. Vaya a "API y servicios" > "Pantalla de consentimiento de OAuth"
b. Elija "Externo" como tipo de usuario y haga clic en "Crear"
do. Complete los campos requeridos:
- Nombre de la aplicación: [El nombre de tu aplicación]
- Correo electrónico de soporte al usuario: [Tu correo electrónico]
- Información de contacto del desarrollador: [Su correo electrónico]
d. Haga clic en "Guardar y continuar"
mi. En la página "Ámbitos", haga clic en "Agregar o quitar ámbitos"
F. Busque y seleccione el alcance "https://mail.google.com/"
gramo. Haga clic en "Actualizar" y luego en "Guardar y continuar"
h. En la página "Usuarios de prueba", haga clic en "Agregar usuarios"
i. Añade tu dirección de Gmail y haz clic en "Guardar y continuar"
j. Revise el resumen y haga clic en "Volver al panel"
Paso 4: Crear credenciales de OAuth2:
a. Vaya a "API y servicios" > "Credenciales"
b. Haga clic en "Crear credenciales" > "ID de cliente OAuth"
do. Elija "Aplicación web" como tipo de aplicación
d. Nombre: [Nombre de tu aplicación]
mi. Orígenes de JavaScript autorizados: agregue el dominio de su servidor (por ejemplo, http://localhost:3000 para desarrollo local)
F. URI de redireccionamiento autorizados:
- Agregar: https://developers.google.com/oauthplayground
- Agregue la URL de devolución de llamada de su servidor si tiene una (por ejemplo, http://localhost:3000/auth/google/callback)
gramo. Haga clic en "Crear"
h. Una ventana emergente mostrará su ID de cliente y su secreto de cliente. Guárdalos de forma segura.
Paso 5: Obtenga un nuevo token de actualización:
a. Vaya a https://developers.google.com/oauthplayground/
b. Haga clic en el ícono de ajustes (Me gusta Configuración) en la esquina superior derecha
do. Haga clic en la casilla de verificación "Usar sus propias credenciales de OAuth"
d. Ingrese su nuevo ID de cliente y secreto de cliente
mi. Cierra la configuración
F. En la barra lateral izquierda, busque "Gmail API v1"
gramo. Seleccione https://mail.google.com/
h. Haga clic en "Autorizar API"
i. Elige tu cuenta de Google y concede los permisos solicitados
j. En la siguiente pantalla, haga clic en "Código de autorización de intercambio por tokens"
k. Copie el "token de actualización" de la respuesta
Si encuentra algún problema durante este proceso o al probar la funcionalidad de correo electrónico, proporcione los mensajes de error específicos o el comportamiento que está viendo en los comentarios.
Desglosemos la implementación paso a paso:
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 sección configura nuestro servidor Express e importa las dependencias necesarias. Usamos body-parser para analizar solicitudes JSON y dotenv para administrar variables de entorno.
const oAuth2Client = new google.auth.OAuth2( CLIENT_ID, CLIENT_SECRET, REDIRECT_URI ); oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });
Creamos un cliente OAuth2 utilizando la biblioteca de autenticación de Google. Esto maneja la actualización de tokens y la autenticación con la API de 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 función:
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"); } });
Nuestro punto final de webhook:
Prueba tu webhook usando curl o Postman:
curl -X POST http://localhost:4000/webhook \ -H "Content-Type: application/json" \ -d '{ "receiver_email": "[email protected]", }'
Problemas y soluciones comunes:
¡Ahora tienes un sistema de notificación por correo electrónico seguro y autenticado por OAuth2! Esta implementación proporciona una base sólida para construir sistemas de notificación más complejos manteniendo al mismo tiempo la seguridad y la confiabilidad.
Espero que esta publicación te resulte útil para configurar el servicio de correo electrónico.
¡Feliz codificación! ?
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3