UNPKG

@hyperbytes/wappler-imap-manager

Version:

IMAP eMail Management for Wappler

73 lines (58 loc) 3 kB
const Imap = require('imap'); exports.imapremoveflag = 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 message UIDValidity specified")); const mailbox = this.parseRequired(options.mailbox, '*', "No mailbox specified"); let flag = this.parseRequired(options.flag, '*', "No Flag specified"); flag = normalizeBackslash(flag); const config = { user: IMAP_USER, password: IMAP_PASSWORD, host: IMAP_HOST, port: IMAP_PORT, tls: IMAP_TLS }; const removeFlagFromEmail = (uid, flagName, mailboxName, expectedUidValidity) => { return new Promise((resolve) => { const imap = new Imap(config); imap.once('ready', () => { imap.openBox(mailboxName, false, (err, box) => { if (err) { imap.end(); return resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 }); } // Validate UIDVALIDITY before proceeding if (Number(box.uidvalidity) !== Number(expectedUidValidity)) { imap.end(); return resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 }); } imap.delFlags(uid, flagName, (err) => { if (err) { imap.end(); return resolve({ uid: uid, mailbox: mailboxName, flag: flagName, status: 401 }); } console.log(`Successfully removed flag ${flagName} from email UID ${uid} in ${mailboxName}`); imap.end(); resolve({ uid: uid, mailbox: mailboxName, flag: flagName, status: 200 }); }); }); }); imap.once('error', () => resolve({ uid: null, mailbox: mailboxName, flag: null, status: 401 })); imap.once('end', () => console.log('IMAP connection closed')); imap.connect(); }); }; return removeFlagFromEmail(uid, flag, mailbox, uidvalidity); }; function normalizeBackslash(inputString) { if (inputString.startsWith("\\\\")) { return inputString.replace(/^\\\\/, "\\"); } return inputString; }