UNPKG

@hyperbytes/wappler-imap-manager

Version:

IMAP eMail Management for Wappler

61 lines (50 loc) 2.21 kB
const Imap = require('imap'); exports.imapsubscribedlist = async function (options) { 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'); return new Promise((resolve, reject) => { const imap = new Imap({ 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 } }); imap.once('ready', () => { imap.getSubscribedBoxes((err, boxes) => { if (err) { imap.end(); return reject({ code: 400, error: `Error retrieving mailboxes: ${err.message}` }); } const mailboxList = []; // Function to recursively extract subfolders function extractMailboxes(boxes, prefix = '') { for (let name in boxes) { const fullName = prefix ? `${prefix}/${name}` : name; mailboxList.push(fullName); if (boxes[name].children) { extractMailboxes(boxes[name].children, fullName); } } } extractMailboxes(boxes); imap.end(); resolve({ mailboxes: mailboxList }); }); }); imap.once('error', (err) => { reject({ code: 401, error: `Connection error: ${err.message}` }); }); imap.once('end', () => { console.log('IMAP connection closed.'); }); imap.connect(); }); };