UNPKG

@hyperbytes/wappler-imap-manager

Version:

IMAP eMail Management for Wappler

67 lines (56 loc) 2.48 kB
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(); }); };