UNPKG

@hyperbytes/wappler-imap-manager

Version:

IMAP eMail Management for Wappler

80 lines (66 loc) 3.02 kB
const Imap = require('imap'); exports.imapunsubscribedlist = async function (options) { const IMAP_HOST = options.imap_host || process.env.IMAP_HOST; const IMAP_PASSWORD = options.imap_password || process.env.IMAP_PASSWORD; const IMAP_USER = options.imap_user || process.env.IMAP_USER; const IMAP_PORT = options.imap_port || process.env.IMAP_PORT; const IMAP_TLS = (options.imap_tls || process.env.IMAP_TLS || 'true').toLowerCase() === 'true'; return new Promise((resolve, reject) => { const imap = new Imap({ user: IMAP_USER, password: IMAP_PASSWORD, host: IMAP_HOST, port: IMAP_PORT, tls: IMAP_TLS }); imap.once('ready', () => { let allMailboxes = []; let subscribedMailboxes = []; // Fetch all mailboxes imap.getBoxes((err, boxes) => { if (err) { imap.end(); return reject({ code: 400, error: `Error retrieving all mailboxes: ${err.message}` }); } function extractMailboxes(boxes, prefix = '') { for (let name in boxes) { const fullName = prefix ? `${prefix}/${name}` : name; allMailboxes.push(fullName); if (boxes[name].children) { extractMailboxes(boxes[name].children, fullName); } } } extractMailboxes(boxes); // Fetch subscribed mailboxes imap.getSubscribedBoxes((err, boxes) => { if (err) { imap.end(); return reject({ code: 400, error: `Error retrieving subscribed mailboxes: ${err.message}` }); } function extractSubscribedMailboxes(boxes, prefix = '') { for (let name in boxes) { const fullName = prefix ? `${prefix}/${name}` : name; subscribedMailboxes.push(fullName); if (boxes[name].children) { extractSubscribedMailboxes(boxes[name].children, fullName); } } } extractSubscribedMailboxes(boxes); // Filter out subscribed mailboxes const nonSubscribedMailboxes = allMailboxes.filter(box => !subscribedMailboxes.includes(box)); imap.end(); resolve({ mailboxes: nonSubscribedMailboxes }); }); }); }); imap.once('error', (err) => { reject({ code: 401, error: `Connection error: ${err.message}` }); }); imap.once('end', () => { console.log('IMAP connection closed.'); }); imap.connect(); }); };;