Set up, configure, and run the Reloop mail microservice locally.
Complete Base Setup First
Ensure you've finished the Setup — before proceeding.
Service Overview
Outbound transactional email API — send requests, template compilation, tracking, and SMTP handoff.
| Property | Value |
|---|---|
| Directory | apps/backend/mail |
| Port | 8015 |
| Local URL | https://local.reloop.sh/api/mail |
| Swagger UI | https://local.reloop.sh/api/mail/openapi |
| Stack | ElysiaJS PostgreSQL Redis NATS BullMQ |
Quick Start
Run from the monorepo root (requires SMTP via Docker):
bun be:mail:dev
The service starts with hot reloading on port 8015.
Environment Configuration
Variables live in apps/backend/mail/.env. Running bun env:setup from the root auto-populates this file.
PG_URL=postgresql://reloop:reloop123@localhost:5432/reloop
REDIS_URL=redis://:reloop123@localhost:6379
PORT=8015
BASE_URL="https://local.reloop.sh"
NATS_URL=nats://localhost:4222
KUMOMTA_HTTP_URL=http://localhost:8020
TRACKING_SECRET=reloop_tracking_secret_default_123
NODE_ENV=development
Reference Table
| Variable | Required | Default |
|---|---|---|
PG_URL | YES | postgresql://... |
REDIS_URL | YES | redis://... |
PORT | YES | 8015 |
KUMOMTA_HTTP_URL | YES | http://localhost:8020 |
TRACKING_SECRET | No | reloop_tracking_secret_default_123 — signs tracked link and open-pixel tokens |
NATS_URL | YES | nats://localhost:4222 |
Development Commands
| Command | Description |
|---|---|
bun be:mail:dev | Start dev server with hot reloading |
bun run --filter=mail build | Compile production bundle |
bun run --filter=mail start | Run compiled production build |
bun run --filter=mail check-types | TypeScript type-check |
Architecture
| Layer | Detail |
|---|---|
| Send pipeline | Validates API keys, compiles templates, injects tracking links. |
| Queues | BullMQ workers dispatch via Redis (mail-queue, mail-retry-queue). |
| MTA handoff | Delivers to the SMTP engine on port 8020. |
| Schema | email_log in packages/db/src/schema/email.ts. |
Was this page helpful?