70 lines
3.0 KiB
JavaScript
70 lines
3.0 KiB
JavaScript
/**
|
||
* TODO:
|
||
* + скачивание вложений
|
||
* - сохранять заголовки в БД и возможно сохранять сообщения целиком ещё где-то
|
||
* - пометка прочитанным, просмотренным (seen)
|
||
* - фоновая индексация всех текстов сообщений в ящике
|
||
* - написание сообщений
|
||
* - ответ, пересылка
|
||
* - подсказка адресов
|
||
* - отправка вложений
|
||
* - пометить прочтённым/непрочтённым
|
||
* - переместить
|
||
* - удалить
|
||
* - пометить как спам
|
||
* - живое обновление (подписка view на новые сообщения)
|
||
* - настройки группировки (дата/прочитано/отмечено)
|
||
* - настройки сортировки (дата/тема/размер/возможно отправитель)
|
||
* - thread'ы (дискуссии)
|
||
* - метки (если вообще нужно)
|
||
* - совсем фантазии: интеграция с maillog'ом и серверным спамфильтром
|
||
*/
|
||
|
||
/**
|
||
* Нужные методы API:
|
||
* - список аккаунтов и папок
|
||
* - список сообщений в папке
|
||
* - содержимое сообщения
|
||
* - поиск по тексту
|
||
* - список тредов в папке, с сообщениями
|
||
* - проверить почту
|
||
* - пометить прочтённым
|
||
* - переместить
|
||
* - удалить
|
||
* - подсказка адресов To
|
||
* - отправить сообщение
|
||
*
|
||
* В определённом плане получается тупость - получается, что дублируешь
|
||
* функционал самого почтового сервера. Но шо ж с ним поделаешь, если он "ни ф силах"...
|
||
* Ведь по сути-то, MTA от такой штуки нужен только 1 метод: "добавить сообщение в папку".
|
||
*
|
||
* Но для сохранения совместимости с IMAP тут два пути - либо тащить всё к себе и потом
|
||
* делать свой IMAP сервер, либо всё-таки мучаться и дублировать функционал.
|
||
*/
|
||
|
||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
||
|
||
if (process.env.DEBUG)
|
||
{
|
||
global.Promise = require('bluebird');
|
||
global.Promise.config({ longStackTraces: true });
|
||
}
|
||
|
||
const pg = require('pg');
|
||
const Syncer = require('./Syncer.js');
|
||
const SyncerWeb = require('./SyncerWeb.js');
|
||
|
||
async function startSync(cfg)
|
||
{
|
||
let dbh = new pg.Client(cfg.pg);
|
||
await dbh.connect();
|
||
let syncer = new Syncer(dbh);
|
||
let syncerweb = new SyncerWeb(syncer, dbh, cfg);
|
||
await syncer.init(cfg);
|
||
syncerweb.listen(8057);
|
||
//await syncer.syncAll();
|
||
}
|
||
|
||
let cfg = require('./cfg.json');
|
||
startSync(cfg).catch(e => { console.error(e.stack); });
|