← На главную

Документация Glass Mail

Полная техническая документация по почтовому клиенту Glass Mail — версия 0.0.6, ООО «АйТи-Изи»

1. Общая информация

Наименование ПОGlass Mail
Версия0.0.6
НазначениеОбеспечение работы с электронной почтой по протоколам IMAP/SMTP
Класс ПОСредство обмена сообщениями (почтовый клиент)
Код ОКПД262.01.29.110
Тип развёртыванияВеб-приложение (server-client архитектура)
ЛицензияMIT
ПравообладательООО «АйТи-Изи» (ИНН 9718191012, г. Москва)
Язык разработкиJavaScript (Node.js), HTML, CSS

2. Архитектура

Glass Mail представляет собой клиент-серверное веб-приложение, состоящее из трёх уровней:

┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │ Браузер │────▶│ Nginx │────▶│ Node.js │ │ (Frontend) │◀────│ (Reverse Proxy)│◀────│ (Backend) │ │ HTML/CSS/JS │ │ SSL/TLS │ │ Express.js │ └─────────────────┘ └─────────────────┘ └───────┬───────┘ │ ┌──────▼───────┐ │ SQLite БД │ │ (локальная) │ └──────────────┘

2.1. Компоненты ПО

КомпонентТехнологияНазначение
FrontendHTML5, CSS3, JavaScript (vanilla)Пользовательский интерфейс
BackendNode.js 20+, Express.js 4.xREST API сервер
База данныхSQLite 3Локальное хранение данных
Веб-серверNginxОбратный прокси, SSL, отдача статики
КонтейнеризацияDocker, Docker ComposeРазвёртывание и изоляция

2.2. Сетевые протоколы

ПротоколПортНазначение
HTTPS8833 (настраивается)Доступ к веб-интерфейсу
IMAP over TLS993Получение почты
SMTP over TLS465Отправка почты

3. Работа с электронной почтой

3.1. Приём писем (IMAP)

  • Подключение к почтовому серверу по протоколу IMAP (порт 993, TLS)
  • Автоматическая и ручная синхронизация папок
  • Поддержка стандартных папок: Входящие, Отправленные, Черновики, Архив, Спам, Корзина
  • Поддержка пользовательских (IMAP) папок сервера
  • Пакетная загрузка писем с пагинацией (по 100 штук)
  • Полная синхронизация по запросу (Shift+Обновить)
  • Отложенная синхронизация (snooze)

3.2. Отправка писем (SMTP)

  • Отправка писем по протоколу SMTP (порт 465, TLS)
  • Поддержка вложенных файлов (attachments)
  • Поля Кому (To), Копия (CC), Скрытая копия (BCC)
  • Шаблоны писем, сохранение черновиков
  • Запланированная отправка писем

3.3. Обработка писем

  • Чтение писем с отображением HTML в изолированном iframe (sandbox)
  • Санитизация HTML от вредоносного кода (XSS-защита)
  • Пометка прочитано/непрочитано, избранное (звёздочка), важное (флаг)
  • Перемещение между папками, архивирование, отложенное письмо (snooze)
  • Пометка как спам, удаление, массовые операции
  • Быстрый ответ (quick reply)
  • Полнотекстовый поиск по содержимому писем (FTS5 — SQLite)
  • Поиск по теме, отправителю, содержимому
  • Расширенный поиск: по отправителю (from), по теме (subject), по дате (с/по), только с вложениями
  • Мгновенный поиск с задержкой 300мс (debounce)

5. Безопасность

5.1. Аутентификация

  • Регистрация пользователей с проверкой через IMAP
  • Аутентификация по JWT-токену (7 дней)
  • Двухфакторная аутентификация (2FA TOTP — совместимо с Google Authenticator)
  • Генерация QR-кода для настройки 2FA
  • Защита от подбора пароля (Rate Limiting: 5 регистраций/час, 500 запросов/15 мин)
  • CAPTCHA при 3 неудачных попытках входа

5.2. Шифрование

  • Шифрование паролей IMAP — AES-256-CBC
  • Хеширование паролей пользователей — bcrypt
  • HTTPS/TLS для всех соединений
  • Заголовки безопасности (Helmet.js): X-Content-Type-Options, X-Frame-Options, Strict-Transport-Security

5.3. Авторизация

  • Проверка JWT-токена для всех API-запросов
  • Изоляция данных пользователей — каждый пользователь видит только свои данные
  • История входов (IP, User-Agent, дата/время)

6. Контакты

  • Адресная книга с хранением контактов
  • Автоматическое создание контактов из входящих/исходящих писем
  • Ручное добавление и редактирование контактов
  • Поиск по контактам с автодополнением при вводе адреса
  • Экспорт/импорт контактов (vCard, CSV)

7. Календарь

  • Встроенный календарь в боковой панели
  • Создание событий и напоминаний
  • Просмотр событий по дням
  • Уведомления о предстоящих событиях

8. Автоматизация

  • Настраиваемые правила фильтрации писем
  • Условия фильтрации: по отправителю, теме, наличию вложений
  • Действия: перемещение в папку, пометка прочитанным, пометка важным
  • Автоответчик (с указанием периода и текста)
  • Подписи писем (автоматическое добавление)

9. Пользовательский интерфейс

  • Адаптивный (responsive) дизайн — desktop и мобильные устройства
  • Тёмная и светлая темы
  • Анимированный стеклянный интерфейс (glassmorphism)
  • Пагинация писем (бесконечная прокрутка)
  • Мастер первоначальной настройки (onboarding wizard)
  • Уведомления об обновлениях (What's New)
  • Состояние подключения (online/offline)

10. Системные требования

10.1. Серверная часть

ПараметрМинимальныеРекомендуемые
ОСLinux (Ubuntu 20.04+, Debian 11+, CentOS 8+)Ubuntu 22.04 LTS
Процессор1 ядро, 1 ГГц2 ядра, 2 ГГц
ОЗУ512 МБ2 ГБ
Диск1 ГБ + объём почты10 ГБ SSD
Docker20.10+, Compose 2.0+24.0+, Compose 2.20+
СетьIMAP (993), SMTP (465)IMAP (993), SMTP (465)

10.2. Клиентская часть (браузер)

БраузерВерсия
Chrome90+
Firefox88+
Safari14+
Edge90+
Разрешение экранаот 320px до 2560px (4K)
JavaScriptES6+ (обязательно)

10.3. Совместимость с российскими ОС

  • ✅ ОС «Альт» (BaseALT) — через Docker
  • ✅ РЕД ОС — через Docker
  • ✅ Astra Linux — через Docker
  • ✅ ОС «ГосЛинукс» — через Docker
  • ✅ Linux (Ubuntu, Debian, CentOS)
  • ✅ Windows Server — через Docker

11. Установка

📦 Установочный файл: Скачайте архив с исходным кодом Glass Mail на странице Получить ПО →. Архив содержит все компоненты: backend, frontend, Docker-конфигурацию и скрипты администрирования.

11.1. Предварительные требования

Для установки Glass Mail на сервере должны быть установлены:

  • Docker 20.10+ и Docker Compose 2.0+
  • Операционная система Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)
  • Не менее 512 МБ оперативной памяти (рекомендуется 2 ГБ)
  • Не менее 1 ГБ дискового пространства + объём для почты
  • Доступ к IMAP (порт 993) и SMTP (порт 465) серверу

11.2. Установка с Docker Compose (рекомендуемый способ)

Шаг 1. Скачивание и распаковка

Скачайте установочный архив на сервер и распакуйте его:

# Скачивание архива прямо на сервер
wget https://айти-изи.рф/files/glass-mail-source.zip -O /tmp/glass-mail-source.zip

# Распаковка
unzip /tmp/glass-mail-source.zip -d /opt/glass-mail
cd /opt/glass-mail

Шаг 2. Создание файла конфигурации

cp .env.example .env

Шаг 3. Настройка переменных окружения

Отредактируйте файл .env:

# Сервер
PORT=3000
NODE_ENV=production

# Безопасность (ОБЯЗАТЕЛЬНО ЗАМЕНИТЬ!)
# Генерация: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
JWT_SECRET=<сгенерировать-уникальный-ключ>

# Шифрование паролей (64 hex символа)
# Генерация: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
ENCRYPTION_KEY=<сгенерировать-64-hex-ключ>

# Почтовый сервер
IMAP_HOST=mail.example.com
IMAP_PORT=993
SMTP_HOST=mail.example.com
SMTP_PORT=465

# CORS (разрешённые домены)
ALLOWED_ORIGINS=https://mail.example.com

⚠️ ВАЖНО: Значения JWT_SECRET и ENCRYPTION_KEY должны быть уникальными и сложными. Никогда не используйте значения по умолчанию в продакшене!

Шаг 4. Сборка и запуск

# Сборка Docker-образов
docker compose build

# Запуск в фоновом режиме
docker compose up -d

Шаг 5. Проверка работоспособности

# Проверка статуса контейнеров
docker compose ps

# Проверка логов
docker compose logs -f

# Health check
curl http://localhost:3000/health
# Ожидаемый ответ: {"status":"ok"}

Приложение будет доступно по адресу http://localhost:8833.

11.3. Установка без Docker (для разработки)

# Установка Node.js 20+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# Клонирование и установка зависимостей
cd backend
npm install --omit=dev

# Настройка окружения
cp ../.env.example ../.env
# Отредактируйте .env

# Запуск
NODE_ENV=production node server.js

Для продакшена рекомендуется использовать Nginx в качестве обратного прокси.

12. Настройка SSL/TLS

12.1. Получение сертификата Let's Encrypt

# Установка certbot
sudo apt install certbot python3-certbot-nginx

# Получение сертификата
sudo certbot certonly --standalone -d mail.example.com

# Копирование сертификатов
cp /etc/letsencrypt/live/mail.example.com/fullchain.pem ssl/
cp /etc/letsencrypt/live/mail.example.com/privkey.pem ssl/

12.2. Автообновление сертификатов

# Добавить в crontab
0 0 1 * * certbot renew --quiet && docker compose restart nginx

13. Резервное копирование

13.1. Ручное резервное копирование

scripts/backup-db.bat

Скрипт создаёт копию базы данных SQLite с меткой даты/времени в директории backups/.

13.2. Автоматическое резервное копирование

# Добавить в crontab (ежедневно в 02:00)
0 2 * * * /opt/glass-mail/scripts/auto-backup.sh

13.3. Восстановление из резервной копии

# Остановка сервиса
docker compose down

# Восстановление
scripts/restore-db.bat

# Запуск сервиса
docker compose up -d

14. Мониторинг и журналирование

14.1. Логи приложения

# Просмотр логов в реальном времени
docker compose logs -f

# Логи только backend
docker compose logs -f backend

# Логи за последние 100 строк
docker compose logs --tail=100

14.2. Мониторинг ресурсов

# Использование ресурсов контейнерами
docker stats

# Использование диска
du -sh /var/lib/docker/volumes/mail-client-data

14.3. Health Check

curl http://localhost:3000/health
# Ожидаемый ответ: {"status":"ok"}

Docker Compose автоматически проверяет здоровье контейнера каждые 30 секунд.

15. Обновление

15.1. Процедура обновления

# 1. Резервное копирование
scripts/backup-db.bat

# 2. Получение новой версии
git pull origin main

# 3. Пересборка и перезапуск
docker compose build
docker compose up -d

# 4. Проверка
docker compose ps
docker compose logs -f --tail=50

15.2. Откат версии

# 1. Остановка
docker compose down

# 2. Восстановление базы данных
scripts/restore-db.bat

# 3. Переключение на предыдущую версию
git checkout 
docker compose build
docker compose up -d

16. Устранение неисправностей

ПроблемаПричинаРешение
Контейнер не запускаетсяОшибка конфигурацииПроверить .env, выполнить docker compose logs
Ошибка 502 Bad GatewayBackend не отвечаетПроверить docker compose ps, перезапустить docker compose restart backend
Письма не синхронизируютсяIMAP недоступенПроверить настройки IMAP, сеть, файрвол
Письма не отправляютсяSMTP недоступенПроверить настройки SMTP, сеть, файрвол
Медленная работаНедостаток памятиУвеличить max-old-space-size, добавить RAM
«JWT_SECRET must be set»Не задан JWT_SECRETНастроить .env файл
База данных заблокированаКонкурентный доступПерезапустить docker compose restart backend

17. REST API

17.1. Аутентификация

МетодEndpointОписание
POST/api/auth/registerРегистрация нового пользователя
POST/api/auth/loginВход в систему
GET/api/auth/meИнформация о текущем пользователе
PUT/api/profile/nameОбновление имени пользователя
PUT/api/profile/passwordСмена пароля
POST/api/auth/2fa/setupНастройка 2FA
POST/api/auth/2fa/verifyПодтверждение 2FA
POST/api/auth/2fa/disableОтключение 2FA

17.2. Почта

МетодEndpointОписание
GET/api/emailsПолучить список писем (с пагинацией)
GET/api/emails/:idПолучить письмо по ID
POST/api/emailsОтправить новое письмо
PATCH/api/emails/:id/readПометить прочитанным/непрочитанным
PATCH/api/emails/:id/starДобавить/убрать из избранного
DELETE/api/emails/:idУдалить письмо
POST/api/emails/:id/moveПереместить письмо
POST/api/emails/:id/snoozeОтложить письмо
POST/api/emails/:id/spamПометить как спам
POST/api/emails/:id/archiveАрхивировать письмо

17.3. IMAP синхронизация

МетодEndpointОписание
POST/api/imap/syncСинхронизировать почту
POST/api/imap/sync-fullПолная синхронизация
GET/api/imap/sync-statusСтатус синхронизации
GET/api/imap/foldersСписок IMAP папок
SSE/api/imap/eventsПотоковые уведомления (Server-Sent Events)

17.4. Контакты, календарь, черновики

МетодEndpointОписание
GET/POST/api/contactsПолучить / добавить контакт
PUT/DELETE/api/contacts/:idОбновить / удалить контакт
GET/POST/api/calendar/eventsПолучить / создать событие
PUT/DELETE/api/calendar/events/:idОбновить / удалить событие
GET/POST/api/draftsПолучить / создать черновик
PUT/DELETE/api/drafts/:idОбновить / удалить черновик

18.1. Открытые компоненты

Все используемые библиотеки и компоненты имеют открытые лицензии (MIT, BSD, Apache 2.0, Public Domain), не содержат ограничений на использование в РФ и не подпадают под экспортный контроль.

18.2. Соответствие 152-ФЗ

ПО Glass Mail может использоваться в качестве оператора персональных данных при соответствующей настройке:

  • Разграничение доступа пользователей
  • Шифрование персональных данных (AES-256-CBC)
  • Ведение журнала доступа (IP, User-Agent, дата/время)
  • Возможность удаления данных по запросу субъекта
  • Данные хранятся локально на сервере организации — не покидают территорию РФ

→ Политика обработки персональных данных

18.3. Ограничения

  • Подключение к одному IMAP/SMTP серверу одновременно на пользователя
  • Максимальный размер вложения: 10 МБ (настраивается)
  • Хранение данных: локальная база данных SQLite (без облачного хранилища)
  • Количество пользователей: не ограничено (зависит от ресурсов сервера, рекомендуется до 100 одновременно)

19. Бесплатное программное обеспечение

🎁 Glass Mail — полностью бесплатное ПО

Glass Mail распространяется бесплатно на условиях лицензии MIT. Это означает:

  • Бесплатное использование — нет лицензионных платежей, подписок или ограничений по количеству пользователей
  • Открытый исходный код — полный доступ к исходному коду для аудита, модификации и адаптации под нужды организации
  • Свободное распространение — право копировать и распространять ПО без ограничений
  • Коммерческое использование — разрешено использование в коммерческих целях без ограничений

Скачайте Glass Mail бесплатно на странице Получить ПО →