@hyperbytes/wappler-imap-manager
Version:
IMAP eMail Management for Wappler
87 lines (69 loc) • 3.27 kB
JavaScript
const Imap = require('imap');
exports.imapflag = async function (options, name) {
const IMAP_HOST = this.parseOptional(options.imap_host, '*', process.env.IMAP_HOST);
const IMAP_PASSWORD = this.parseOptional(options.imap_password, '*', process.env.IMAP_PASSWORD);
const IMAP_USER = this.parseOptional(options.imap_usesr, '*', process.env.IMAP_USER);
const IMAP_PORT = this.parseOptional(options.imap_port, '*', process.env.IMAP_PORT);
const imap_tlsstring = this.parseOptional(options.imap_tls, '*', process.env.IMAP_TLS).toLowerCase();
const IMAP_TLS = (imap_tlsstring == 'true');
console.log(options.uid);
console.log(options.imapflag);
const uid = this.parseRequired(options.uid, '*', "No message UID specified");
const uidvalidity = this.parseRequired(options.uidvalidity, '*', "No message UIDValidity specified");
const mailbox = this.parseRequired(options.mailbox, '*', "No mailbox specified");
const flag = normalizeBackslash(this.parseRequired(options.imapflag, '*', "No Flag specified"));
function flagEmail(config, emailUID, mailboxName, expectedUidvalidity) {
return new Promise((resolve) => {
const imap = new Imap(config);
function openMailbox(cb) {
imap.openBox(mailboxName, false, function (err, box) {
if (err) {
imap.end();
return resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 });
}
if (Number(box.uidvalidity) !== Number(expectedUidvalidity)) {
imap.end();
return resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 });
}
imap.addFlags(emailUID, [flag], function (err) {
if (err) {
imap.end();
return resolve({ uid: emailUID, mailbox: mailboxName, flag: flag, status: 401 });
}
console.log(`Email UID ${emailUID} in ${mailboxName} flagged with ${flag}.`);
imap.end();
resolve({ uid: emailUID, mailbox: mailboxName, flag: flag, status: 200 });
});
});
}
imap.once('ready', function () {
openMailbox();
});
imap.once('error', function () {
resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 });
});
imap.once('end', function () {
console.log('IMAP Connection ended');
});
imap.connect();
});
}
// Config setup
const config = {
user: IMAP_USER,
password: IMAP_PASSWORD,
host: IMAP_HOST,
port: IMAP_PORT,
tls: IMAP_TLS,
tlsOptions: {
rejectUnauthorized: process.env.IMAP_CERTIFICATE_OVERRIDE === '1' ? false : true
}
};
return flagEmail(config, uid, mailbox, uidvalidity);
};
function normalizeBackslash(inputString) {
if (inputString.startsWith("\\\\")) {
return inputString.replace(/^\\\\/, "\\");
}
return inputString;
}