const Imap = require('imap'); const imapConfig = { user: 'mil2inda@gmail.com', password: 'iyiyaqaksbewpclq', host: 'imap.gmail.com', port: 993, tls: true, keepalive: { forceNoop: true }, tlsOptions: { rejectUnauthorized: false // Ignore self-signed certificate error } }; async function watchIncomingEmails() { const imap = new Imap(imapConfig); let largestUID = 0; function openInbox() { return new Promise((resolve, reject) => { imap.openBox('INBOX', true, (err, box) => { if (err) { reject(err); } else { resolve(box); } }); }); } function fetchNewMessages() { return new Promise((resolve, reject) => { let criteria = ['UNSEEN', ['FROM', 'nattaponw@sourcecode.co.th'], ['UID', `${largestUID + 1}:*`]] imap.search(criteria, (searchErr, results) => { if (searchErr) { reject(searchErr); return; } try { const fetch = imap.fetch(results, { bodies: '' }); const messages = []; fetch.on('message', (msg, seqno) => { let buffer = ''; msg.on('attributes', (attrs) => { largestUID = attrs.uid }); msg.on('body', (stream, info) => { console.log(info) stream.on('data', (chunk) => buffer += chunk.toString()); stream.on('end', () => { messages.push(buffer); }); }); }); fetch.on('end', () => { resolve(messages); }); } catch (fetchError) { if(fetchError.message == 'Nothing to fetch') { console.log('There are no messages to fetch.') resolve([]) } else { reject(fetchError) } } }); }); } imap.once('ready', async () => { try { const box = await openInbox(); console.log('Listening for new messages...'); imap.on('mail', async (numNewMsgs) => { console.log(`${numNewMsgs} new message(s) received.`); const messages = await fetchNewMessages(); console.log(`Unread messages: ${messages.length} from nattaponw@sourcecode.co.th` ) // messages.forEach((message, index) => { // console.log(`New message ${index + 1}:`, message); // }); console.log('All new messages processed.'); }); } catch (error) { console.log('Error:', error); } }); imap.once('error', (err) => { console.error('IMAP error:', err); }); imap.once('end', () => { console.log('IMAP connection ended.'); }); imap.connect(); } watchIncomingEmails();