This repository has been archived on 2021-08-13. You can view files and clone it, but cannot push or open issues/pull-requests.
fookat-email-bridge/mailinterface.js

65 lines
1.9 KiB
JavaScript

var {EventEmitter} = require("events");
var fs = require("fs");
var Mbox = require("node-mbox");
var {simpleParser} = require("mailparser");
var {SMTPClient} = require("smtp-client");
class MailInterface extends EventEmitter {
constructor(opts) {
super();
Object.assign(this, opts);
fs.watch(this.mbox, eventType => {
if (eventType != "change") return;
this.check();
});
}
check() {
console.log("checking mail");
if (fs.statSync(this.mbox).size == 0) return console.log("no mail");
var mbox = new Mbox(this.mbox);
var gotMail = false;
mbox.on("message", msg => {
simpleParser(msg).then(parsedMail => {
console.log("parsed mail:\n", parsedMail);
this.emit("mail", parsedMail);
});
});
mbox.on("error", console.error);
mbox.on("end", () => {
console.log("finished loading mail");
fs.writeFileSync(this.mbox, '');
});
}
async send(body) {
console.log("sending mail:", body);
var smtpClient = new SMTPClient(this.smtp);
await smtpClient.connect();
await smtpClient.greet({hostname: this.smtp.ehlo});
await smtpClient.mail({from: this.smtp.from});
await smtpClient.rcpt({to: this.target});
var msg = '\r\n' + body.replace(/\n/g, '\r\n') + '\r\n';
/*var msg = 'MIME-Version: 1.0\r\n' +
'Content-Type: multipart/alternative; boundary="asdfhuiadfghviuarevhilu"\r\n' +
"\r\n" +
"--asdfhuiadfghviuarevhilu\r\n" +
'Content-Type: text/plain; charset="UTF-8"\r\n' +
'\r\n' + body.replace(/\n/g, '\r\n') + '\r\n' +
'\r\n' +
"--asdfhuiadfghviuarevhilu\r\n" +
'Content-Type: text/html; charset="UTF-8"\r\n' +
'\r\n<div dir="ltr">' + body.replace(/\n/g, '\r\n') + '</div>\r\n' +
'\r\n' +
'--asdfhuiadfghviuarevhilu--\r\n';*/
await smtpClient.data(msg);
await smtpClient.quit();
console.log("finished sending mail");
}
}
module.exports = MailInterface;