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