const Imap = require("imap"); const { simpleParser } = require("mailparser"); const inspect = require("util").inspect; const saveMessage = require("./storeMessage").saveMessage; const registerMessageInApp = require("../app/saveMessage").registerMessageInApp; const imapConfig = require("./config.json").mail; const fs = require("fs"); const { DEBUG } = require("../utils/debug"); const imap = new Imap({ user: imapConfig.user, password: imapConfig.password, tlsOptions: { servername: "imap.gmail.com" }, host: "imap.gmail.com", port: 993, tls: true, }); // reset table; let shouldReset = false; // let shouldReset = true; if (shouldReset) { const { execQuery, execQueryAsync } = require("../db/db"); const query = "SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'mail'"; execQueryAsync(query).then((results) => { execQuery("SET FOREIGN_KEY_CHECKS=0"); results.map((table) => { execQuery("DELETE FROM " + table.table_name); }); }); return; } imap.once("ready", function () { const readOnly = true; imap.openBox("INBOX", readOnly, (err, box) => { // console.log(box); // uidvalidty uidnext, messages total and new // imap.search(["ALL"], function (err, results) { // console.log(results[results.length - 1]); // }); // const f = imap.fetch(970, { // size: true, // envelope: true, // }); const promises = []; const mails = []; const f = imap.seq.fetch('1:10', { size: true, envelope: true }); f.on("message", function (msg, seqno) { msg.once("attributes", (attrs) => { // todo find boxId const boxId = 1; mails.push(attrs); promises.push(saveMessage(attrs, boxId, imap)); }); }); f.once("error", function (err) { DEBUG.log("Fetch error: " + err); }); f.once("end", async function () { Promise.all(promises).then(async (res) => { DEBUG.log("Done fetching all messages!"); for (let i = 0; i < mails.length; i++) { await registerMessageInApp(res[i], mails[i]); } }); }); // imap.end() }); }); imap.once("error", function (err) { console.log(err); }); imap.once("end", function () { console.log("Connection ended"); }); imap.connect(); function isValidEmail(email) { // todo return true; } module.exports = { isValidEmail, };