UNPKG

@hyperbytes/wappler-imap-manager

Version:

IMAP eMail Management for Wappler

52 lines (42 loc) 2.11 kB
const Imap = require('imap'); require('dotenv').config(); // Load environment variables exports.imaptrashperms = async function () { 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 }); imap.once('ready', () => { const trashFolder = process.env.IMAP_TRASH_NAME || 'Trash'; // Default folder imap.getBoxes((err, boxes) => { if (err) return reject({ code: 400, error: err }); if (!boxes[trashFolder]) return reject({ code: 404, error: 'Trash folder not found' }); imap.openBox(trashFolder, true, (err, box) => { // Try opening in read-write mode if (err) return reject({ code: 400, error: err }); resolve({ name: trashFolder, readOnly: !box.writeable, // Corrected method messagesTotal: box.messages.total, unseenCount: box.messages.unseen, recentCount: box.messages.recent, uidValidity: box.uidvalidity, uidNext: box.uidnext }); imap.end(); }); }); }); imap.once('error', err => reject({ code: 401, error: err })); imap.once('end', () => console.log('IMAP connection closed.')); imap.connect(); }); };