169 lines
5.0 KiB
JavaScript
169 lines
5.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const Imap = require('imap');
|
|
const { simpleParser } = require('mailparser');
|
|
const readline = require('readline');
|
|
const util = require('util');
|
|
|
|
// Create readline interface for password input
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
});
|
|
|
|
// Promisify the question method
|
|
const question = util.promisify((query, callback) => {
|
|
rl.question(query, (answer) => callback(null, answer));
|
|
});
|
|
|
|
async function testMailbox(username, password, server = 'mail.2weekmail.fyi', port = 993) {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
console.log(`Connecting to ${server}:${port}...`);
|
|
|
|
const imap = new Imap({
|
|
user: username,
|
|
password: password,
|
|
host: server,
|
|
port: port,
|
|
tls: true,
|
|
tlsOptions: { rejectUnauthorized: false } // For testing with self-signed certs
|
|
});
|
|
|
|
function openInbox(cb) {
|
|
imap.openBox('INBOX', false, cb);
|
|
}
|
|
|
|
imap.once('ready', () => {
|
|
console.log(`Login successful as ${username}!`);
|
|
|
|
// List mailboxes
|
|
imap.getBoxes((err, boxes) => {
|
|
if (err) throw err;
|
|
|
|
console.log('\nAvailable mailboxes:');
|
|
Object.keys(boxes).forEach(box => {
|
|
console.log(` - ${box}`);
|
|
if (boxes[box].children) {
|
|
Object.keys(boxes[box].children).forEach(child => {
|
|
console.log(` - ${box}${boxes[box].delimiter}${child}`);
|
|
});
|
|
}
|
|
});
|
|
|
|
// Open inbox
|
|
console.log('\nSelecting INBOX...');
|
|
openInbox((err, box) => {
|
|
if (err) throw err;
|
|
|
|
console.log(`Found ${box.messages.total} message(s) in INBOX`);
|
|
|
|
// If no messages, close connection
|
|
if (box.messages.total === 0) {
|
|
imap.end();
|
|
console.log('\nLogout successful');
|
|
resolve(true);
|
|
return;
|
|
}
|
|
|
|
// Get the last 10 messages (or all if less than 10)
|
|
const numMessages = Math.min(box.messages.total, 10);
|
|
const start = box.messages.total - numMessages + 1;
|
|
const fetch = imap.seq.fetch(`${start}:*`, {
|
|
bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)'],
|
|
struct: true
|
|
});
|
|
|
|
console.log('\nMessage list:');
|
|
let counter = 1;
|
|
|
|
fetch.on('message', (msg, seqno) => {
|
|
msg.on('body', (stream, info) => {
|
|
let buffer = '';
|
|
|
|
stream.on('data', (chunk) => {
|
|
buffer += chunk.toString('utf8');
|
|
});
|
|
|
|
stream.once('end', () => {
|
|
simpleParser(buffer, (err, parsed) => {
|
|
if (err) {
|
|
console.error(`Error parsing message: ${err}`);
|
|
return;
|
|
}
|
|
|
|
console.log(` ${counter}. From: ${parsed.from?.text || 'Unknown'}`);
|
|
console.log(` Subject: ${parsed.subject || 'No Subject'}`);
|
|
console.log(` Date: ${parsed.date || 'Unknown'}`);
|
|
console.log(` ID: ${seqno}`);
|
|
console.log(' ' + '-'.repeat(40));
|
|
|
|
counter++;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
fetch.once('error', (err) => {
|
|
console.error(`Fetch error: ${err}`);
|
|
reject(err);
|
|
});
|
|
|
|
fetch.once('end', () => {
|
|
imap.end();
|
|
console.log('\nLogout successful');
|
|
resolve(true);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
imap.once('error', (err) => {
|
|
console.error(`IMAP Error: ${err}`);
|
|
reject(err);
|
|
});
|
|
|
|
imap.once('end', () => {
|
|
console.log('Connection ended');
|
|
rl.close();
|
|
});
|
|
|
|
imap.connect();
|
|
|
|
} catch (error) {
|
|
console.error(`Error: ${error}`);
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
async function main() {
|
|
if (process.argv.length < 3) {
|
|
console.log('Usage: node test_mailbox.js username@domain.com [server] [port]');
|
|
process.exit(1);
|
|
}
|
|
|
|
const username = process.argv[2];
|
|
const server = process.argv.length > 3 ? process.argv[3] : 'mail.2weekmail.fyi';
|
|
const port = process.argv.length > 4 ? parseInt(process.argv[4]) : 993;
|
|
|
|
try {
|
|
// Get password securely
|
|
const password = await question(`Enter password for ${username}: `);
|
|
|
|
const success = await testMailbox(username, password, server, port);
|
|
|
|
if (success) {
|
|
console.log('\nMailbox test completed successfully!');
|
|
process.exit(0);
|
|
} else {
|
|
console.log('\nMailbox test failed!');
|
|
process.exit(1);
|
|
}
|
|
} catch (error) {
|
|
console.error('\nMailbox test failed with error:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main(); |