Сервис для отправки email-сообщений с поддержкой очередей, логирования, шаблонов и файлов. Также включает веб-дашборд для мониторинга отправки и управления шаблонами.
- 📩 Отправка email (обычных и шаблонных) через очереди Bull (Redis)
- 📊 Логирование статусов отправки (created, pending, sent, failed)
- 🔁 Автоматические ретраи при неудачной отправке с логированием количества попыток
- 📝 Шаблоны email (загрузка, редактирование, предпросмотр)
- 📊 Графический дашборд для мониторинга отправки email
- 📎 Поддержка вложений в письмах (attachments)
- 📜 Просмотр логов через API
- 🌐 Поддержка SMTP, SendGrid, Mailgun (в планах)
- 📊 Мониторинг через Prometheus / Grafana (в планах)
📂 notifications
├── dashboard/ # React-приложение для мониторинга
├── 📂 src/
│ ├── 📂 common # Модуль с общими компонентами
│ ├── 📂 email # Модуль для управлениями шаблонами
│ │ ├── 📂 templates # Шаблоны писем (Handlebars)
│ │ │ ├── welcome.hbs # Пример шаблона email
│ │ ├── email.module.ts # Модуль email-сервиса
│ │ ├── email.controller.ts # Контроллер API
│ │ ├── email.service.ts # Сервис отправки писем
│ │ ├── email.processor.ts # Обработчик очереди Bull
│ │ ├── email-log.entity.ts # Логирование email в PostgreSQL
│ │ ├── email-log.service.ts # Сервис логирования
│ ├── 📂 statistics # Модуль для управлениями шаблонами
│ ├── 📂 templates # Модуль для управлениями шаблонами
├── app.module.ts # Главный модуль
├── main.ts # Точка входа
yarn installPORT=3000
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE=notifications
REDIS_HOST=localhost
REDIS_PORT=6379
EMAIL_MAX_RETRIES=3
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER[email protected]
SMTP_PASS=your-password
SMTP_FROM="No Reply" <[email protected]># development
yarn run start
# watch mode
yarn run start:dev
# production mode
yarn run start:proddocker run -d --name redis -p 6379:6379 redis# unit tests
$ yarn run test
# e2e tests
$ yarn run test:e2e
# test coverage
$ yarn run test:covPOST /email/sendBody (JSON):
{
"to": "[email protected]",
"subject": "Добро пожаловать!",
"text": "Ваш аккаунт создан.",
"template": "welcome",
"templateData": { "name": "Алексей", "code": "1234" },
"attachments": [
{ "filename": "file.pdf", "path": "/uploads/file.pdf" }
]
}GET /email/logs?status=failed&[email protected]&page=1&limit=10Доступен по адресу http://localhost:3000.