Files
QR-master/read-inbox.mjs
Timo Knuth aab808c553 Impeccable
2026-04-29 20:34:09 +02:00

50 lines
1.6 KiB
JavaScript

import tls from 'node:tls';
function readMessages(seqs) {
return new Promise((resolve, reject) => {
const socket = tls.connect({ host: 'imap.qrmaster.net', port: 993 }, () => {
let buf = '';
let step = 0;
const results = {};
socket.on('data', (chunk) => {
buf += chunk.toString();
const lines = buf.split('\r\n');
buf = lines.pop();
for (const line of lines) {
if (step === 0 && line.includes('* OK')) {
socket.write(`A1 LOGIN timo@qrmaster.net fiesta\r\n`);
step = 1;
} else if (step === 1 && line.startsWith('A1 OK')) {
socket.write(`A2 SELECT INBOX\r\n`);
step = 2;
} else if (step === 2 && line.startsWith('A2 OK')) {
socket.write(`A3 FETCH ${seqs.join(',')} (BODY.PEEK[1])\r\n`);
step = 3;
} else if (step === 3) {
if (line.startsWith('A3 OK')) {
socket.write(`A4 LOGOUT\r\n`);
resolve(results);
}
const m = line.match(/^\* (\d+) FETCH/);
if (m) results[m[1]] = { body: '' };
const curr = Object.keys(results).at(-1);
if (curr && line && !line.match(/^\* \d+ FETCH/) && !line.startsWith('A3') && line !== ')') {
results[curr].body += line + '\n';
}
}
}
});
socket.on('error', reject);
});
});
}
const r = await readMessages([954, 990, 997]);
for (const [seq, msg] of Object.entries(r)) {
console.log(`\n=== SEQ ${seq} ===`);
console.log(msg.body.slice(0, 1500));
}