Email service built with NestJS and TypeScript. All email sending is processed asynchronously through RabbitMQ for better scalability and reliability.
Сервис для работы с электронной почтой, построенный на NestJS и TypeScript. Поддерживает:
- ✅ Асинхронную отправку email через RabbitMQ
- ✅ Автоматическую обработку сообщений из очереди
- ✅ Автоматическое переподключение к RabbitMQ
- ✅ Health checks для всех сервисов
- ✅ Docker поддержка (production и development)
- ✅ Гибкая конфигурация через environment variables
# 1. Создайте .env файл
cp .env.example .env
# 2. Отредактируйте .env с вашими настройками почты
# 3. Запустите все сервисы
docker-compose up -d
# 4. Проверьте статус
curl http://localhost:3000/health📖 Подробная инструкция: DOCKER.md
# 1. Установите зависимости
npm install
# 2. Создайте .env файл (см. QUICK_START.md)
# 3. Запустите приложение
npm run start:dev📖 Подробная инструкция: QUICK_START.md
npm installСоздайте файл .env в корне проекта:
# Application
NODE_ENV=development
PORT=3000
APP_NAME=Atom DBRO Email Service
# Email Configuration
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USER=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_FROM=noreply@example.com
MAIL_SECURE=false
# RabbitMQ Configuration (обязательно)
RABBITMQ_URL=amqp://localhost:5672
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
RABBITMQ_QUEUE=email_queue
RABBITMQ_EXCHANGE=email_exchange
RABBITMQ_HEARTBEAT=60📖 Подробная настройка: CONFIGURATION.md
# Режим разработки с hot reload
npm run start:dev
# Режим отладки
npm run start:debug
# Production режим
npm run start:prod
# Обычный запуск
npm run startПосле запуска приложение будет доступно по адресу: http://localhost:3000
| Method | Endpoint | Описание |
|---|---|---|
| GET | / |
Приветственное сообщение |
| GET | /config |
Конфигурация сервисов |
| GET | /health |
Статус всех сервисов |
| POST | /send-mail |
Постановка email в очередь RabbitMQ |
| Method | Endpoint | Описание |
|---|---|---|
| GET | /rabbitmq/status |
Статус подключения |
| POST | /rabbitmq/publish |
Публикация в exchange |
| POST | /rabbitmq/send-to-queue |
Отправка в очередь |
Отправка email (через RabbitMQ):
curl -X POST http://localhost:3000/send-mail \
-H "Content-Type: application/json" \
-d '{
"to": "recipient@example.com",
"subject": "Test Email",
"html": "<h1>Hello!</h1><p>This is a test email.</p>"
}'Ответ:
{
"success": true,
"message": "Email queued for sending",
"status": "pending"
}Проверка здоровья:
curl http://localhost:3000/health📝 Полные примеры: API.md
- Клиент отправляет запрос на
POST /send-mail - Сервис публикует сообщение в RabbitMQ exchange с routing key
email.send - EmailConsumer автоматически обрабатывает сообщение из очереди
- Email отправляется через SMTP (Nodemailer)
- Клиент получает мгновенный ответ о том, что email поставлен в очередь
Преимущества:
- ✅ Быстрый ответ клиенту (не ждем отправки email)
- ✅ Масштабируемость (можно запустить несколько workers)
- ✅ Надежность (сообщения не потеряются при сбоях)
- ✅ Возможность retry при ошибках
# Unit тесты
npm run test
# Unit тесты в watch режиме
npm run test:watch
# E2E тесты
npm run test:e2e
# Покрытие тестами
npm run test:cov# Сборка проекта
npm run build
# Production сборка
npm run start:prod# Запуск линтера
npm run lint
# Форматирование кода
npm run formatatom-dbro-email-service/
├── src/
│ ├── config/ # Конфигурация приложения
│ │ ├── configuration.ts
│ │ └── env.validation.ts
│ ├── mail/ # Mail модуль
│ │ ├── dto/
│ │ ├── mail.module.ts
│ │ └── mail.service.ts
│ ├── rabbitmq/ # RabbitMQ модуль
│ │ ├── dto/
│ │ ├── rabbitmq.module.ts
│ │ └── rabbitmq.service.ts
│ ├── email-consumer/ # Email consumer для RabbitMQ
│ │ ├── email-consumer.service.ts
│ │ └── email-consumer.module.ts
│ ├── types/ # TypeScript типы
│ ├── main.ts # Точка входа
│ ├── app.module.ts # Главный модуль
│ ├── app.controller.ts # API контроллер
│ └── app.service.ts # Сервис приложения
├── test/ # Тесты
├── Dockerfile # Docker образ
├── docker-compose.yml # Production окружение
├── docker-compose.dev.yml # Development окружение
└── package.json
- NestJS - Progressive Node.js framework
- TypeScript - Typed JavaScript
- @nestjs/config - Configuration management
- Nodemailer - Email sending library
- RabbitMQ - Message broker
- amqplib - AMQP client library
- amqp-connection-manager - Auto-reconnecting AMQP wrapper
- class-validator - Validation
- class-transformer - Object transformation
- Jest - Testing framework
- ESLint - Linting
- Prettier - Code formatting
- 🚀 QUICK_START.md - Запуск за 5 минут
- 🐳 DOCKER.md - Полное руководство по Docker
- ⚙️ CONFIGURATION.md - Настройка и конфигурация
- 📝 API.md - Примеры использования API
- 🐰 RABBITMQ.md - Руководство по RabbitMQ
- ✅ Переменные окружения для секретов
- ✅ Непривилегированный пользователь в Docker
- ✅ Валидация входных данных
- ✅ Health checks для мониторинга
.env в Git!
Ошибка: mail: "disconnected"
Решение:
- Проверьте
MAIL_HOST,MAIL_PORTв.env - Проверьте
MAIL_USERиMAIL_PASSWORD - Для Gmail: используйте пароль приложения, не основной пароль
- Проверьте интернет-соединение
Ошибка: rabbitmq: "disconnected"
Решение:
- Убедитесь, что RabbitMQ запущен
- Проверьте
RABBITMQ_HOSTиRABBITMQ_PORTв.env - Проверьте учетные данные
Ошибка: Port 3000 is already in use
Решение: Измените PORT в .env файле:
PORT=3001UNLICENSED
Если возникли вопросы:
- Проверьте QUICK_START.md
- Изучите CONFIGURATION.md
- Посмотрите примеры в API.md
Версия: 0.0.1
Статус: ✅ Production Ready