@hyperbytes/wappler-imap-manager
Version:
IMAP eMail Management for Wappler
74 lines (58 loc) • 2.76 kB
JavaScript
const Imap = require('imap');
exports.imapdelete = 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');
const uid = this.parseRequired(options.uid, '*', "No message UID specified");
const uidvalidity = Number(this.parseRequired(options.uidvalidity, '*', "No UIDVALIDITY specified"));
const mailbox = this.parseRequired(options.mailbox, '*', "No Mailbox specified");
const flagonly = this.parseOptional(options.flagonly, '*', false);
function deleteEmail(config, emailUID, uidvalidity) {
return new Promise((resolve) => {
const imap = new Imap(config);
function openMailbox(cb) {
imap.openBox(mailbox, false, cb);
}
imap.once('ready', function () {
openMailbox(function (err, box) {
if (err) {
imap.end();
return resolve({ uid: null, mailbox: mailbox, status: 401 });
}
if (box.uidvalidity !== uidvalidity) {
imap.end();
return resolve({ uid: null, mailbox: mailbox, status: 401 });
}
imap.addFlags(emailUID, ['\\Deleted'], function (err) {
if (err) {
imap.end();
return resolve({ uid: emailUID, mailbox: mailbox, status: 401 });
}
console.log(`Email UID ${emailUID} marked for deletion.`);
imap.end();
resolve({ uid: emailUID, mailbox: mailbox, expunged: !flagonly, status: 200 });
});
});
});
imap.once('error', function () {
resolve({ uid: null, mailbox: mailbox, 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
};
return deleteEmail(config, uid, uidvalidity);
};