First Commit

This commit is contained in:
Fabian Stamm 2020-07-18 18:14:04 +02:00
commit 66fdedcb1e
6 changed files with 2300 additions and 0 deletions

6
.editorconfig Normal file
View File

@ -0,0 +1,6 @@
root=true
[*]
charset = utf-8
indent_size = 3
indent_style = space
insert_final_newline = true

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
node_modules/
lib/
config.ini

2132
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

35
package.json Normal file
View File

@ -0,0 +1,35 @@
{
"name": "@hibas123/issc",
"version": "1.0.0",
"description": "",
"main": "lib/index.js",
"bin": "lib/index.js",
"scripts": {
"dev": "nodemon -e ts --exec ts-node src/index.ts",
"build": "tsc && pkg ."
},
"pkg": {
"targets": [
"node12-linux"
]
},
"author": "Fabian Stamm <dev@fabianstamm.de>",
"license": "ISC",
"devDependencies": {
"@types/ini": "^1.3.30",
"@types/node": "^14.0.23",
"@types/nodemailer": "^6.4.0",
"@types/yargs": "^15.0.5",
"nodemon": "^2.0.4",
"pkg": "^4.4.9",
"ts-node": "^8.10.2",
"typescript": "^3.9.7"
},
"dependencies": {
"@hibas123/nodelogging": "^2.4.5",
"get-stdin": "^8.0.0",
"ini": "^1.3.5",
"nodemailer": "^6.4.10",
"yargs": "^15.4.1"
}
}

113
src/index.ts Normal file
View File

@ -0,0 +1,113 @@
process.env.LOGGING_NO_DEFAULT = "true";
import { LoggingBase, ConsoleAdapter } from "@hibas123/logging";
import * as yargs from "yargs";
const options = yargs
.option("verbose", {
alias: "v",
type: "boolean",
description: "Print debug informations",
required: false,
})
.option("config", {
alias: "c",
type: "string",
default: "/etc/issc.ini",
description: "Config file location",
})
.option("to", {
alias: "t",
description: "The receiver of the email",
type: "string",
required: true,
})
.option("subject", {
alias: "s",
description: "Subject of the mail",
type: "string",
required: false,
}).argv;
const Logging = new LoggingBase({
console: false,
});
if (options.verbose) {
Logging.addAdapter(new ConsoleAdapter(true));
}
Logging.log("Starting INSANLY SIMPLE SMTP CLIENT");
const EXAMPLE_CONFIG = `
[smtp]
server=
from=
username=
password=
port=
`;
import * as nm from "nodemailer";
import * as ini from "ini";
import { readFileSync, fstat, existsSync } from "fs";
Logging.log("Loading configuration");
if (!existsSync(options.config)) {
console.log(
"Add configuration to /etc/issc.ini or set your location by using --config <path>. \n\n Example config: \n\n" +
EXAMPLE_CONFIG
);
process.exit(1);
}
const config = ini.parse(readFileSync(options.config, "utf-8"));
Logging.log("Creating Transport");
const transport = nm.createTransport({
host: config.smtp.server,
port: Number(config.smtp.port || 587),
secure: false,
auth: {
user: config.smtp.username,
pass: config.smtp.password,
method: "PLAIN",
},
logger: {
fatal: Logging.errorMessage,
trace: Logging.log,
level: () => undefined,
debug: Logging.debug,
error: Logging.errorMessage,
info: Logging.log,
warn: Logging.warn,
},
});
Logging.log("Verifying transport");
import getstdin = require("get-stdin");
transport
.verify()
.then(async () => {
Logging.log("Reading STDIN");
const text = await getstdin();
Logging.log("Sending mail");
const res = await transport.sendMail({
from: config.smtp.from,
to: options.to,
subject: options.subject,
text,
});
console.log("Message sent");
})
.catch((err) => {
Logging.error(err);
console.log("Some error occured!", err.message);
})
.finally(() => {
transport.close();
process.exit();
});

11
tsconfig.json Normal file
View File

@ -0,0 +1,11 @@
{
"compilerOptions": {
"outDir": "lib/",
"target": "ESNext",
"module": "CommonJS",
"moduleResolution": "Node",
"resolveJsonModule": true,
"sourceMap": true
},
"include": ["src/"]
}