@hyperbytes/wappler-imap-manager
Version:
IMAP eMail Management for Wappler
52 lines (42 loc) • 2.11 kB
JavaScript
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();
});
};