const Imap = require('imap'); const { simpleParser } = require('mailparser'); const fs = require('fs'); const imap = new Imap({ user: 'cococlawdy@gmail.com', password: 'wvfi htti cusm ypal', host: 'imap.gmail.com', port: 993, tls: true, tlsOptions: { rejectUnauthorized: false } }); function openInbox(cb) { imap.openBox('INBOX', true, cb); } imap.once('ready', function() { openInbox(function(err, box) { if (err) throw err; // Search for very recent emails (last hour) const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000); imap.search([['SINCE', oneHourAgo]], function(err, results) { if (err) throw err; if (!results || !results.length) { console.log('No new messages in last hour'); imap.end(); return; } console.log(`Found ${results.length} message(s) from last hour`); const f = imap.fetch(results, { bodies: '' }); f.on('message', function(msg, seqno) { msg.on('body', function(stream, info) { simpleParser(stream, async (err, parsed) => { if (err) { console.error('Parse error:', err); return; } console.log('\n=== EMAIL ==='); console.log('From:', parsed.from.text); console.log('Subject:', parsed.subject); console.log('Date:', parsed.date); console.log('Text preview:', parsed.text?.substring(0, 500)); if (parsed.attachments && parsed.attachments.length > 0) { console.log('\n--- Attachments ---'); for (const att of parsed.attachments) { console.log(`\nFilename: ${att.filename}`); console.log(`Type: ${att.contentType}`); console.log(`Size: ${att.size} bytes`); // Save attachment const filepath = `/root/.openclaw/workspace/Projects/Casting/${att.filename}`; fs.writeFileSync(filepath, att.content); console.log(`Saved to: ${filepath}`); } } console.log('=============\n'); }); }); }); f.once('end', function() { console.log('\nDone checking emails'); setTimeout(() => imap.end(), 1000); }); }); }); }); imap.once('error', function(err) { console.error('IMAP Error:', err); }); imap.once('end', function() { console.log('Connection ended'); }); imap.connect();