@hyperbytes/wappler-imap-manager
Version:
IMAP eMail Management for Wappler
67 lines (56 loc) • 2.48 kB
JavaScript
const Imap = require('imap');
const { simpleParser } = require('mailparser');
exports.imapgetrawheaders = async function (options) {
return new Promise((resolve, reject) => {
const imap = new Imap({
user: options.imap_user,
password: options.imap_password,
host: options.imap_host,
port: options.imap_port,
tls: true,
tlsOptions: {
rejectUnauthorized: process.env.IMAP_CERTIFICATE_OVERRIDE === '1' ? false : true
}
});
imap.once('ready', () => {
imap.openBox(options.mailbox, false, (err, box) => { // Fixed `mailbox` reference
if (err) {
imap.end();
return reject(`Error opening mailbox: ${err.message}`);
}
if (box.messages.total === 0) {
imap.end();
return reject('No messages found.');
}
imap.search(['ALL'], (err, results) => {
if (err || results.length === 0) {
imap.end();
return reject('No messages available.');
}
const fetch = imap.fetch([results[0]], { bodies: 'HEADER' });
fetch.on('message', (msg) => {
let headerData = '';
msg.on('body', (stream) => {
stream.on('data', (chunk) => {
headerData += chunk.toString();
});
stream.on('end', async () => {
try {
const parsed = await simpleParser(headerData);
resolve(parsed.headers);
} catch (error) {
reject(`Error parsing headers: ${error.message}`);
}
});
});
});
fetch.once('error', (err) => reject(`Fetch error: ${err.message}`));
fetch.once('end', () => imap.end());
});
});
});
imap.once('error', (err) => reject(`IMAP Error: ${err.message}`));
imap.once('end', () => console.log('IMAP connection closed.'));
imap.connect();
});
};