From 328e29fed5df61a019cc1740ac537ff8fa707226 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Wed, 30 Apr 2025 13:45:49 -0300 Subject: [PATCH] feat(DialogKeywords): integrate Nodemailer for email sending functionality --- package-lock.json | 16 +++++-- package.json | 1 + .../basic.gblib/services/DialogKeywords.ts | 45 +++++++++++-------- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54aea9b83..4df416c0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,6 +127,7 @@ "node-html-parser": "6.1.13", "node-nlp": "4.27.0", "node-tesseract-ocr": "2.2.1", + "nodemailer": "^6.10.1", "nodemon": "^3.1.7", "npm": "10.8.3", "open": "10.1.0", @@ -167,6 +168,8 @@ "ssr-for-bots": "1.0.1-c", "strict-password-generator": "1.1.2", "stripe": "^18.0.0", + "super-strong-password-generator": "2.0.2", + "super-strong-password-generator-es": "2.0.2", "svg2img": "^1.0.0-beta.2", "swagger-client": "3.29.2", "swagger-ui-dist": "5.17.14", @@ -210,8 +213,6 @@ "prettier-standard": "16.4.1", "semantic-release": "24.1.0", "simple-commit-message": "4.1.3", - "super-strong-password-generator": "2.0.2", - "super-strong-password-generator-es": "2.0.2", "travis-deploy-once": "5.0.11", "tslint": "6.1.3", "tsx": "^4.19.1", @@ -30191,6 +30192,15 @@ "integrity": "sha512-ySkL4lBCto86OyQ0blAGzylWSECcn5I0lM3bYEhe75T8Zxt/BFUMHa8ktUguR7zwXNdS/Hms31VfSsYKN1383g==", "license": "ISC" }, + "node_modules/nodemailer": { + "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" + } + }, "node_modules/nodemon": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", @@ -42052,14 +42062,12 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/super-strong-password-generator/-/super-strong-password-generator-2.0.2.tgz", "integrity": "sha512-EhTep3QH9YhS/w0aMUAV4CVGesAb9JPGQfW/q7VKVJNXm/F2qzCYoJ5n3NPfGXdJvw0vI6bOv1KbIQQL98288A==", - "dev": true, "license": "MIT" }, "node_modules/super-strong-password-generator-es": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/super-strong-password-generator-es/-/super-strong-password-generator-es-2.0.2.tgz", "integrity": "sha512-7S5eBNPuym8lAAw7oxJqoSFWSI/4FuX8QjEiZLCntnxs/3xFiJjSKebBxY6ySqnUbM5t3Tf1q/nr89BBfnPTXw==", - "dev": true, "license": "MIT" }, "node_modules/supports-color": { diff --git a/package.json b/package.json index c134ccc32..3dfd1e22e 100644 --- a/package.json +++ b/package.json @@ -187,6 +187,7 @@ "node-html-parser": "6.1.13", "node-nlp": "4.27.0", "node-tesseract-ocr": "2.2.1", + "nodemailer": "6.10.1", "nodemon": "^3.1.7", "npm": "10.8.3", "open": "10.1.0", diff --git a/packages/basic.gblib/services/DialogKeywords.ts b/packages/basic.gblib/services/DialogKeywords.ts index 7d22ffe39..4ea783f6d 100644 --- a/packages/basic.gblib/services/DialogKeywords.ts +++ b/packages/basic.gblib/services/DialogKeywords.ts @@ -30,7 +30,6 @@ 'use strict'; -import sgMail from '@sendgrid/mail'; import { ActivityTypes } from 'botbuilder'; import { GBLog, GBMinInstance } from 'botlib'; import * as df from 'date-diff'; @@ -62,6 +61,7 @@ import { GBVMService } from './GBVMService.js'; import { SystemKeywords } from './SystemKeywords.js'; import { WebAutomationServices } from './WebAutomationServices.js'; import { Client } from 'minio'; +import nodemailer from 'nodemailer'; const { List, Buttons } = pkg; @@ -574,7 +574,6 @@ export class DialogKeywords { // tslint:disable-next-line:no-console GBLogEx.info(min, `[E-mail]: to:${to},subject: ${subject},body: ${body}.`); - const emailToken = process.env.EMAIL_API_KEY; // Inline word document used as e-mail body. @@ -583,24 +582,32 @@ export class DialogKeywords { body = result.value; } - if (emailToken) { - return new Promise((resolve, reject) => { - sgMail.setApiKey(emailToken); - const msg = { - to: to, - from: process.env.EMAIL_FROM, - subject: subject, - text: body, - html: body - }; - sgMail.send(msg, false, (err, res) => { - if (err) { - reject(err); - } else { - resolve(res); - } - }); + if (GBConfigService.get('GB_MODE') !== 'legacy') { + + const transporter = nodemailer.createTransport({ + host: process.env.EMAIL_SERVER || 'localhost', + port: parseInt(process.env.EMAIL_PORT || '587', 10), + secure: false, + auth: { + user: process.env.EMAIL_USER , + pass: process.env.EMAIL_PASS , + }, + tls: { + rejectUnauthorized: (process.env.EMAIL_REJECT_UNAUTHORIZED === 'true'), + }, }); + + const mailOptions = { + from: process.env.EMAIL_FROM, + to: to, + subject: subject, + text: body, + html: body, + }; + + await transporter.sendMail(mailOptions); + GBLogEx.info(min, `E-mail ${to} (${subject}) sent via NodeMailer.`); + } else { let { client } = await GBDeployer.internalGetDriveClient(min);