Add nodemailer and sendMail function
This commit is contained in:
parent
5a755114c6
commit
d748706a22
|
@ -1,4 +1,7 @@
|
||||||
YOLO_WEB_URL=http://localhost:3333
|
YOLO_WEB_URL=http://localhost:3333
|
||||||
DATASETS=./datasets
|
DATASETS=./datasets
|
||||||
JOB_DELAY=0
|
JOB_DELAY=0
|
||||||
APP_NAME=yolo_web
|
APP_NAME=yolo_web
|
||||||
|
MAIL_FROM=""
|
||||||
|
MAIL_SMTP=""
|
||||||
|
MAIL_SMTP_PORT=25
|
|
@ -26,6 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
require("dotenv/config");
|
||||||
const express_1 = __importDefault(require("express"));
|
const express_1 = __importDefault(require("express"));
|
||||||
const promises_1 = __importDefault(require("fs/promises"));
|
const promises_1 = __importDefault(require("fs/promises"));
|
||||||
const fs_1 = require("fs");
|
const fs_1 = require("fs");
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,48 @@
|
||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.sendMail = void 0;
|
||||||
|
const nodemailer_1 = __importDefault(require("nodemailer"));
|
||||||
|
const log_1 = require("./log");
|
||||||
|
const from = process.env['MAIL_FROM'];
|
||||||
|
const smtp = process.env['MAIL_SMTP'];
|
||||||
|
const port = typeof process.env['MAIL_SMTP_PORT'] !== 'undefined' ? 25 : parseInt(process.env['MAIL_SMTP_PORT'], 10);
|
||||||
|
let transporter = null;
|
||||||
|
const log = (0, log_1.createLog)('mail');
|
||||||
|
if (typeof from !== 'undefined' && from !== null && from !== '' &&
|
||||||
|
typeof smtp !== 'undefined' && smtp !== null && smtp !== '') {
|
||||||
|
transporter = nodemailer_1.default.createTransport({
|
||||||
|
host: smtp,
|
||||||
|
port,
|
||||||
|
secure: false,
|
||||||
|
tls: { rejectUnauthorized: false }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function sendMail(to, subject, body) {
|
||||||
|
if (transporter !== null) {
|
||||||
|
try {
|
||||||
|
await transporter.sendMail({
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
subject,
|
||||||
|
html: body
|
||||||
|
});
|
||||||
|
log.info(`Sent email "${subject}"`);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
log.error(`Error sending email "${subject}"`);
|
||||||
|
log.error(err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.warn(`Email not configured, not sending "${subject}"`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
exports.sendMail = sendMail;
|
||||||
|
module.exports = { sendMail };
|
||||||
|
//# sourceMappingURL=mail.js.map
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../src/mail.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;AACpC,+BAAkC;AAGlC,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAY,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;AAE9H,IAAI,WAAW,GAA4B,IAAI,CAAC;AAEhD,MAAM,GAAG,GAAY,IAAA,eAAS,EAAC,MAAM,CAAC,CAAC;AAEvC,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IAC3D,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;IAC7D,WAAW,GAAG,oBAAU,CAAC,eAAe,CAAC;QACrC,IAAI,EAAE,IAAI;QACV,IAAI;QACJ,MAAM,EAAG,KAAK;QACd,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;KACrC,CAAC,CAAC;CACN;AAEM,KAAK,UAAU,QAAQ,CAAE,EAAW,EAAE,OAAgB,EAAE,IAAa;IACxE,IAAI,WAAW,KAAK,IAAI,EAAE;QACtB,IAAI;YACA,MAAM,WAAW,CAAC,QAAQ,CAAC;gBACvB,IAAI;gBACJ,EAAE;gBACF,OAAO;gBACP,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,GAAG,CAAC,CAAC;SACvC;QAAC,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,KAAK,CAAC,wBAAwB,OAAO,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,KAAK,CAAC;SAChB;KACJ;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,sCAAsC,OAAO,GAAG,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AApBD,4BAoBC;AAED,MAAM,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC"}
|
|
@ -17,6 +17,7 @@
|
||||||
"mime": "^3.0.0",
|
"mime": "^3.0.0",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
"node-fetch": "^2.7.0",
|
"node-fetch": "^2.7.0",
|
||||||
|
"nodemailer": "^6.9.7",
|
||||||
"sqlite3": "^5.1.6",
|
"sqlite3": "^5.1.6",
|
||||||
"triple-beam": "^1.4.1",
|
"triple-beam": "^1.4.1",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
"@types/mime": "^3.0.1",
|
"@types/mime": "^3.0.1",
|
||||||
"@types/multer": "^1.4.7",
|
"@types/multer": "^1.4.7",
|
||||||
"@types/node-fetch": "^2.6.9",
|
"@types/node-fetch": "^2.6.9",
|
||||||
|
"@types/nodemailer": "^6.4.14",
|
||||||
"@types/sqlite3": "^3.1.8",
|
"@types/sqlite3": "^3.1.8",
|
||||||
"@types/uuid": "^9.0.2",
|
"@types/uuid": "^9.0.2",
|
||||||
"@types/winston": "^2.4.4",
|
"@types/winston": "^2.4.4",
|
||||||
|
@ -200,6 +202,15 @@
|
||||||
"form-data": "^4.0.0"
|
"form-data": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/nodemailer": {
|
||||||
|
"version": "6.4.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.14.tgz",
|
||||||
|
"integrity": "sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/qs": {
|
"node_modules/@types/qs": {
|
||||||
"version": "6.9.7",
|
"version": "6.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
||||||
|
@ -1688,6 +1699,14 @@
|
||||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/nodemailer": {
|
||||||
|
"version": "6.9.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz",
|
||||||
|
"integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/nopt": {
|
"node_modules/nopt": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"@types/mime": "^3.0.1",
|
"@types/mime": "^3.0.1",
|
||||||
"@types/multer": "^1.4.7",
|
"@types/multer": "^1.4.7",
|
||||||
"@types/node-fetch": "^2.6.9",
|
"@types/node-fetch": "^2.6.9",
|
||||||
|
"@types/nodemailer": "^6.4.14",
|
||||||
"@types/sqlite3": "^3.1.8",
|
"@types/sqlite3": "^3.1.8",
|
||||||
"@types/uuid": "^9.0.2",
|
"@types/uuid": "^9.0.2",
|
||||||
"@types/winston": "^2.4.4",
|
"@types/winston": "^2.4.4",
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
"mime": "^3.0.0",
|
"mime": "^3.0.0",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
"node-fetch": "^2.7.0",
|
"node-fetch": "^2.7.0",
|
||||||
|
"nodemailer": "^6.9.7",
|
||||||
"sqlite3": "^5.1.6",
|
"sqlite3": "^5.1.6",
|
||||||
"triple-beam": "^1.4.1",
|
"triple-beam": "^1.4.1",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
|
|
|
@ -21,12 +21,6 @@ if [[ "${JSON}" != *"{"* ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ./scripts/claim_mail.sh ]; then
|
|
||||||
bash ./scripts/claim_mail.sh "${JSON}"
|
|
||||||
else
|
|
||||||
echo "No email script, not sending."
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(echo $JSON | jq -r '.id')
|
ID=$(echo $JSON | jq -r '.id')
|
||||||
|
|
||||||
bash ./scripts/train.sh "${JSON}"
|
bash ./scripts/train.sh "${JSON}"
|
||||||
|
|
|
@ -103,8 +103,3 @@ rm "${ZIPPATH}"
|
||||||
deactivate
|
deactivate
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
if [ -f ./scripts/completed_mail.sh ]; then
|
|
||||||
bash ./scripts/completed_mail.sh "${JSON}"
|
|
||||||
else
|
|
||||||
echo "No email script, not sending"
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'dotenv/config'
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { Express, Request, Response, NextFunction } from 'express'
|
import { Express, Request, Response, NextFunction } from 'express'
|
||||||
import fs from 'fs/promises';
|
import fs from 'fs/promises';
|
||||||
|
@ -11,6 +12,7 @@ import multer from 'multer';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
import { getType } from 'mime';
|
import { getType } from 'mime';
|
||||||
import { createLog } from './log'
|
import { createLog } from './log'
|
||||||
|
import { sendMail } from './mail';
|
||||||
import type { Logger } from 'winston';
|
import type { Logger } from 'winston';
|
||||||
import * as Handlebars from 'handlebars';
|
import * as Handlebars from 'handlebars';
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
import nodemailer from 'nodemailer';
|
||||||
|
import { createLog } from './log';
|
||||||
|
import type { Logger } from 'winston';
|
||||||
|
|
||||||
|
const from : string = process.env['MAIL_FROM'];
|
||||||
|
const smtp : string = process.env['MAIL_SMTP'];
|
||||||
|
const port : number = typeof process.env['MAIL_SMTP_PORT'] !== 'undefined' ? 25 : parseInt(process.env['MAIL_SMTP_PORT'], 10);
|
||||||
|
|
||||||
|
let transporter : nodemailer.Transporter = null;
|
||||||
|
|
||||||
|
const log : Logger = createLog('mail');
|
||||||
|
|
||||||
|
if (typeof from !== 'undefined' && from !== null && from !== '' &&
|
||||||
|
typeof smtp !== 'undefined' && smtp !== null && smtp !== '') {
|
||||||
|
transporter = nodemailer.createTransport({
|
||||||
|
host: smtp,
|
||||||
|
port,
|
||||||
|
secure : false,
|
||||||
|
tls: { rejectUnauthorized: false }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function sendMail (to : string, subject : string, body : string) : Promise<boolean>{
|
||||||
|
if (transporter !== null) {
|
||||||
|
try {
|
||||||
|
await transporter.sendMail({
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
subject,
|
||||||
|
html: body
|
||||||
|
});
|
||||||
|
log.info(`Sent email "${subject}"`);
|
||||||
|
} catch (err) {
|
||||||
|
log.error(`Error sending email "${subject}"`);
|
||||||
|
log.error(err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.warn(`Email not configured, not sending "${subject}"`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { sendMail };
|
Loading…
Reference in New Issue