new(basic.gblib): New SEND MAIL keyword.

This commit is contained in:
Rodrigo Rodriguez 2021-03-20 10:48:12 -03:00
parent 3f7c9eec67
commit ee3569f54b
3 changed files with 94 additions and 19 deletions

48
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "botserver",
"version": "2.0.91",
"version": "2.0.113",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -2457,6 +2457,47 @@
}
}
},
"@sendgrid/client": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.4.2.tgz",
"integrity": "sha512-bu8lLbRD+OV7YsYNemEy8DRoxs8/8u325EXNlQ3VaqhcpbM0eSvdL5e5Wa7VZpbczcNCJmf/sr/uqFmwcO5S+A==",
"requires": {
"@sendgrid/helpers": "^7.4.2",
"axios": "^0.21.1"
},
"dependencies": {
"axios": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"requires": {
"follow-redirects": "^1.10.0"
}
},
"follow-redirects": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA=="
}
}
},
"@sendgrid/helpers": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.4.2.tgz",
"integrity": "sha512-b/IyBwT4zrOfXA0ISvWZsnhYz+5uAO20n68J8n/6qe5P1E2p0L7kWNTN5LYu0S7snJPUlbEa6FpfrSKzEcP9JA==",
"requires": {
"deepmerge": "^4.2.2"
}
},
"@sendgrid/mail": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.4.2.tgz",
"integrity": "sha512-hvIOnm8c3zVyDnJcyBuAeujmpKX56N3D/LpiZrFuLHjAz4iEHrmL2sJ3iU9O6hxcb07gd1CES+z9Fg7FBT26uQ==",
"requires": {
"@sendgrid/client": "^7.4.2",
"@sendgrid/helpers": "^7.4.2"
}
},
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@ -7037,6 +7078,11 @@
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
},
"defer-to-connect": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",

View file

@ -53,6 +53,7 @@
"@semantic-release/changelog": "5.0.1",
"@semantic-release/exec": "5.0.0",
"@semantic-release/git": "9.0.0",
"@sendgrid/mail": "^7.4.2",
"@types/validator": "13.1.0",
"adal-node": "0.2.1",
"any-shell-escape": "0.1.1",

View file

@ -40,6 +40,7 @@ import { SecService } from '../../security.gbapp/services/SecService';
const request = require('request-promise-native');
const MicrosoftGraph = require('@microsoft/microsoft-graph-client');
const path = require('path');
const sgMail = require('@sendgrid/mail');
/**
* @fileoverview General Bots server core.
@ -610,12 +611,39 @@ export class SystemKeywords {
* Sends an e-mail.
*
* @example
*
* SEND MAIL "email@domain.com", "Subject", "Message text."
*
*/
public async sendEmail(to, subject, body) {
// tslint:disable-next-line:no-console
GBLog.info(`[E-mail]: to:${to}, subject: ${subject}, body: ${body}.`);
const emailToken = process.env.EMAIL_API_KEY;
return new Promise<any>((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);
}
});
});
}
}
/**
* Calls any REST API by using GET HTTP method.
*
@ -623,14 +651,14 @@ export class SystemKeywords {
*
*/
public async getByHttp(url: string) {
const options = {
uri: url
};
const options = {
uri: url
};
let result = await request.get(options);
GBLog.info(`[GET]: ${url} : ${result}`);
return JSON.parse(result);
}
let result = await request.get(options);
GBLog.info(`[GET]: ${url} : ${result}`);
return JSON.parse(result);
}
/**
* Calls any REST API by using POST HTTP method.
@ -642,18 +670,18 @@ export class SystemKeywords {
*
*/
public async postByHttp(url: string, data) {
const options = {
uri: url,
json: true,
body: data
};
const options = {
uri: url,
json: true,
body: data
};
let result = await request.post(options);
GBLog.info(`[POST]: ${url} (${data}): ${result}`);
return JSON.parse(result);
}
let result = await request.post(options);
GBLog.info(`[POST]: ${url} (${data}): ${result}`);
return JSON.parse(result);
}
public async numberOnly(text: string) {
return text.replace(/\D/gi, '');
}
return text.replace(/\D/gi, '');
}
}