kill-the-newsletter custom
This commit is contained in:
parent
41ba8f1977
commit
43ecf1a788
|
@ -0,0 +1,14 @@
|
||||||
|
FROM debian:12
|
||||||
|
|
||||||
|
WORKDIR /kill-the-newsletter
|
||||||
|
|
||||||
|
RUN apt update
|
||||||
|
RUN apt install -y wget
|
||||||
|
|
||||||
|
RUN wget https://github.com/leafac/kill-the-newsletter/releases/download/v1.0.1/kill-the-newsletter--linux--v1.0.1.tgz
|
||||||
|
|
||||||
|
RUN tar -xzf kill-the-newsletter--linux--v1.0.1.tgz
|
||||||
|
|
||||||
|
COPY docker.js .
|
||||||
|
|
||||||
|
CMD ["./kill-the-newsletter", "docker.js"]
|
|
@ -0,0 +1,12 @@
|
||||||
|
services:
|
||||||
|
kill-the-newsletter:
|
||||||
|
container_name: kill-the-newsletter
|
||||||
|
image: registry.bhasher.com/kill-the-newsletter:latest
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:4000:80/tcp
|
||||||
|
environment:
|
||||||
|
- URL=https://kill-the-newsletter.com
|
||||||
|
- SMTP=smtp://localhost
|
||||||
|
- ADMIN_EMAIL=kill-the-newsletter@localhost
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
|
@ -0,0 +1,87 @@
|
||||||
|
module.exports = async (require) => {
|
||||||
|
const path = require("path");
|
||||||
|
const killTheNewsletter = require(".").default;
|
||||||
|
|
||||||
|
const { webApplication, emailApplication } = killTheNewsletter(
|
||||||
|
path.join("/data")
|
||||||
|
);
|
||||||
|
|
||||||
|
webApplication.set("url", process.env.URL || "http://localhost");
|
||||||
|
webApplication.set("email", process.env.SMTP || "smtp://localhost");
|
||||||
|
webApplication.set("administrator", `mailto:${process.env.ADMIN_EMAIL || "localhost"}`);
|
||||||
|
|
||||||
|
|
||||||
|
webApplication.listen(80, () => {
|
||||||
|
console.log("Kill-the-newsletter server started");
|
||||||
|
console.log(webApplication.get("url"));
|
||||||
|
});
|
||||||
|
|
||||||
|
emailApplication.listen(25, () => {
|
||||||
|
console.log("Email server started");
|
||||||
|
});
|
||||||
|
|
||||||
|
const Imap = require('imap');
|
||||||
|
const nodemailer = require('nodemailer');
|
||||||
|
const { simpleParser } = require('mailparser');
|
||||||
|
|
||||||
|
const imapConfig = {
|
||||||
|
user: process.env.IMAP_USER,
|
||||||
|
password: process.env.IMAP_PASSWORD,
|
||||||
|
host: process.env.IMAP_HOST,
|
||||||
|
port: process.env.IMAP_PORT,
|
||||||
|
tls: true
|
||||||
|
};
|
||||||
|
|
||||||
|
const smtpConfig = {
|
||||||
|
host: 'localhost',
|
||||||
|
port: 25,
|
||||||
|
secure: false
|
||||||
|
};
|
||||||
|
|
||||||
|
const imap = new Imap(imapConfig);
|
||||||
|
|
||||||
|
function openInbox(cb) {
|
||||||
|
imap.openBox('INBOX', false, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
function processEmails() {
|
||||||
|
openInbox((err, box) => {
|
||||||
|
if (err) throw err;
|
||||||
|
|
||||||
|
imap.search(['UNSEEN'], (err, results) => {
|
||||||
|
if (err || !results || !results.length) {
|
||||||
|
console.log('No new emails');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const f = imap.fetch(results, { bodies: '' });
|
||||||
|
f.on('message', msg => {
|
||||||
|
msg.on('body', stream => {
|
||||||
|
simpleParser(stream, async (err, mail) => {
|
||||||
|
let transporter = nodemailer.createTransport(smtpConfig);
|
||||||
|
|
||||||
|
await transporter.sendMail({
|
||||||
|
from: mail.from,
|
||||||
|
to: mail.to,
|
||||||
|
subject: mail.subject,
|
||||||
|
text: mail.text,
|
||||||
|
html: mail.html
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Email forwarded');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
imap.once('ready', () => {
|
||||||
|
processEmails();
|
||||||
|
|
||||||
|
setInterval(processEmails, (proess.env.INTERVAL || 300) * 1000);
|
||||||
|
});
|
||||||
|
imap.once('error', err => console.error(err));
|
||||||
|
imap.connect();
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in New Issue