const MailListener = require('mail-listener2'); async function getCodeFromEmail() { return new Promise((resolve) => { const mailListener = new MailListener({ username: process.env.MAIL_USER, password: process.env.MAIL_PASSWORD, host: process.env.MAIL_HOST, port: process.env.MAIL_PORT, tls: true, }); mailListener.on('server:connected', function() { console.log('imap server connected'); }); mailListener.on('server:disconnected', function() { console.log('imap server disconnected'); }); mailListener.on('error', function() { console.log('imap error handling'); }); mailListener.start(); mailListener.on('mail', function(mail, seqno, attributes) { if (!attributes) return; if (mail.subject.trim() == 'Verify your email address') { const text = mail.text.trim(); const match = text.match(/code: (\d+)/i); if (match) { const imap = mailListener.imap; imap.addFlags(attributes.uid, '\\Seen', (err) => { if (err) console.log('Error marking email as seen:', err); }); imap.move(attributes.uid, '\\Trash', (moveErr) => { if (moveErr) console.log('Error moving email to trash:', moveErr); }); mailListener.stop(); resolve(match[1]); } } else if (mail.subject.trim() == 'AWS Email Verification') { const text = mail.text.trim(); const match = text.match(/code:\s*(\d+)/i); if (match) { const imap = mailListener.imap; imap.addFlags(attributes.uid, '\\Seen', (err) => { if (err) console.log('Error marking email as seen:', err); }); mailListener.stop(); resolve(match[1]); } } }); }); } module.exports = { getCodeFromEmail };