97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
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);
|
|
// execQuery("DROP TABLE " + 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,
|
|
};
|