ColdMailer is a production-oriented cold email automation system built with Django, Celery, Redis, and PostgreSQL.
The project focuses on scalable backend architecture, asynchronous processing, distributed services, and real-world deployment practices rather than just local development.
- π Upload resumes for personalized cold email generation
- β‘ Asynchronous email processing using Celery workers
- π Automatic retry system for failed emails
- π§Ή Scheduled background jobs using Celery Beat
- ποΈ Temporary centralized file storage
- π§ Designed for multi-service deployment environments
- π Email logging and status tracking
- βοΈ Cloud deployment ready
flowchart LR
U[User / Browser]
W[Django Web App]
DB[(PostgreSQL)]
R[(Redis Broker)]
CW[Celery Worker]
CB[Celery Beat]
FS[(Central File Storage)]
SMTP[SMTP Provider]
U -->|Upload resume & inputs| W
W -->|Store resume temporarily| FS
W -->|Enqueue async task| R
W -->|Create email logs| DB
R -->|Dispatch task| CW
CW -->|Read resume| FS
CW -->|Send email| SMTP
CW -->|Update logs/status| DB
CB -->|Schedule retries & cleanup| R
| Category | Technology |
|---|---|
| Backend | Django |
| Language | Python |
| Database | PostgreSQL |
| Queue/Broker | Redis |
| Async Workers | Celery |
| Scheduler | Celery Beat |
| Deployment | Railway |
| Static Files | WhiteNoise |
coldmailer/
β
βββ coldmailer/ # Django project settings
βββ mailer/ # Main application logic
βββ templates/ # HTML templates
βββ static/ # CSS and JS
βββ attachments/ # Local development uploads
βββ manage.py
βββ requirements.txtCreate a .env file in the root directory.
SECRET_KEY=your_secret_key
DEBUG=True
DATABASE_URL=postgresql://username:password@localhost:5432/coldmailer
REDIS_URL=redis://127.0.0.1:6379/0
SMTP_ENCRYPTION_KEY=your_encryption_keygit clone https://github.com/your-username/coldmailer.git
cd coldmailerpython3 -m venv .venv
source .venv/bin/activatepython -m venv .venv
.venv\Scripts\activatepip install -r requirements.txtsudo apt update
sudo apt install redis-serverStart Redis:
sudo systemctl start redis-serverVerify Redis:
redis-cli pingExpected output:
PONGInstall PostgreSQL and create a database.
Example:
CREATE DATABASE coldmailer;Update your DATABASE_URL accordingly.
python manage.py migratepython manage.py collectstatic --noinputpython manage.py runservercelery -A coldmailer worker --loglevel=infocelery -A coldmailer beat --loglevel=infoThe project is designed to run as multiple services:
- Django Web Service
- Celery Worker
- Celery Beat Scheduler
- Redis
- PostgreSQL
python manage.py migrate && python manage.py collectstatic --noinput && gunicorn coldmailer.wsgi:application --bind 0.0.0.0:$PORT- Do not use SQLite in production
- Redis is required for Celery
- PostgreSQL is required for persistent data
- Temporary files should use centralized/shared storage
- Services are stateless and distributed
- π€ AI-generated personalized emails
- π Analytics dashboard
- π Resume parser
- π― ATS optimization
- π¬ Campaign tracking
- π Email templates
- π Web Scraper for E-Mails
- π Lead Generation
This project focuses on:
- Distributed backend systems
- Production deployment
- Asynchronous task queues
- Service-oriented architecture
- Fault tolerance
- Scalability considerations
ColdMailer was built as a backend engineering project to explore how production systems behave beyond local development.
The focus was not only on features, but also on reliability, architecture, deployment, and scalability.