From cfd2202dfe686c634b9e7b0cb13bb1dd60ba746e Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 29 Apr 2025 17:14:52 -0600 Subject: [PATCH 1/2] using nodemaler and stmp --- package-lock.json | 14 +++++++------ package.json | 1 + server/helper/gmail.js | 46 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a08a42..f0eb4a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "mariadb": "^2.5.1", "moment": "^2.29.1", "multer": "^1.4.2", + "nodemailer": "^6.10.1", "sequelize": "^6.3.5", "validator": "^13.1.17" }, @@ -1994,9 +1995,10 @@ } }, "node_modules/nodemailer": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", - "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==", + "license": "MIT-0", "engines": { "node": ">=6.0.0" } @@ -4525,9 +4527,9 @@ "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==" }, "nodemailer": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", - "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==" + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==" }, "nodemon": { "version": "2.0.15", diff --git a/package.json b/package.json index 9986364..6b322b9 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "mariadb": "^2.5.1", "moment": "^2.29.1", "multer": "^1.4.2", + "nodemailer": "^6.10.1", "sequelize": "^6.3.5", "validator": "^13.1.17" }, diff --git a/server/helper/gmail.js b/server/helper/gmail.js index cb60784..69a9198 100644 --- a/server/helper/gmail.js +++ b/server/helper/gmail.js @@ -1,4 +1,4 @@ -require('../config/config'); +/* require('../config/config'); const send = require('gmail-send')({ user: process.env.GMAIL, @@ -21,3 +21,47 @@ const gmail = (subject, to, text) => { }; module.exports = gmail; + */ + + + + +// src/utils/gmail.js (o donde prefieras) +// gmail.js (o el nombre que prefieras) +require('../config/config'); // mantiene tu carga de variables +const nodemailer = require('nodemailer'); + +// Transporter con pooling y throttling +const transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', // cambia a smtp-relay.gmail.com si usas Workspace + port: 587, + secure: false, // STARTTLS en puerto 587 + requireTLS: true, + auth: { + user: process.env.USER_GMAIL, // ejemplo: tu-cuenta@gmail.com + pass: process.env.PASS_GMAIL, // App-Password de 16 caracteres + }, + pool: true, // reutiliza la conexión + maxConnections: 1, // una conexión simultánea + maxMessages: 100, // reabre después de 100 envíos + rateDelta: 2000, // ventana de 2 s + rateLimit: 1, // máx. 1 mensaje por ventana (≈ 0.5 msg/s) +}); + +/** + * Envía un correo (API idéntica a tu versión anterior). + * @param {string} subject Asunto + * @param {string|string[]} to Destinatario(s) + * @param {string} text Cuerpo en texto plano + * @return {Promise} info de nodemailer + */ +const gmail = (subject, to, text) => + transporter.sendMail({ + from: process.env.USER_GMAIL, + to, + subject, + text, + }); + +module.exports = gmail; + From b2ce341ef1e5e2472f6cdeeff1d2a14f51380aeb Mon Sep 17 00:00:00 2001 From: dscadmin Date: Wed, 30 Apr 2025 11:49:47 -0600 Subject: [PATCH 2/2] =?UTF-8?q?Cambio=20a=20c=C3=B3digo=20en=20archivo=20s?= =?UTF-8?q?erver/helper/gmail.js=20para=20env=C3=ADo=20de=20correos=20con?= =?UTF-8?q?=20Relay=20SMTP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/helper/gmail.js | 61 +++++++----------------------------------- 1 file changed, 10 insertions(+), 51 deletions(-) diff --git a/server/helper/gmail.js b/server/helper/gmail.js index 69a9198..d5f3fc3 100644 --- a/server/helper/gmail.js +++ b/server/helper/gmail.js @@ -1,60 +1,19 @@ -/* require('../config/config'); - -const send = require('gmail-send')({ - user: process.env.GMAIL, - pass: process.env.GMAILPASSWORD, -}); - -const gmail = (subject, to, text) => { - - return new Promise((resolve, reject) => { - send({ subject, to, text }, (error, result, fullResult) => { - if (error) reject(error); - resolve(result); - }); - }); - - - // return "envio de correo" - - -}; - -module.exports = gmail; - */ - - - - -// src/utils/gmail.js (o donde prefieras) -// gmail.js (o el nombre que prefieras) require('../config/config'); // mantiene tu carga de variables const nodemailer = require('nodemailer'); -// Transporter con pooling y throttling const transporter = nodemailer.createTransport({ - host: 'smtp.gmail.com', // cambia a smtp-relay.gmail.com si usas Workspace - port: 587, - secure: false, // STARTTLS en puerto 587 - requireTLS: true, - auth: { - user: process.env.USER_GMAIL, // ejemplo: tu-cuenta@gmail.com - pass: process.env.PASS_GMAIL, // App-Password de 16 caracteres - }, - pool: true, // reutiliza la conexión - maxConnections: 1, // una conexión simultánea - maxMessages: 100, // reabre después de 100 envíos - rateDelta: 2000, // ventana de 2 s - rateLimit: 1, // máx. 1 mensaje por ventana (≈ 0.5 msg/s) + host: 'smtp-relay.gmail.com', + port: 587, + secure: false, + requireTLS: true, + name: 'acatlan.unam.mx', + pool: true, + maxConnections: 1, + maxMessages: 100, + rateDelta: 2000, + rateLimit: 1, }); -/** - * Envía un correo (API idéntica a tu versión anterior). - * @param {string} subject Asunto - * @param {string|string[]} to Destinatario(s) - * @param {string} text Cuerpo en texto plano - * @return {Promise} info de nodemailer - */ const gmail = (subject, to, text) => transporter.sendMail({ from: process.env.USER_GMAIL,