Warmup Scheduler
Schedule email warmup campaigns with gradual volume increase to protect sender reputation.
📄 Product Preview
Try the interactive reader and demo tools below, or get the full product with all content unlocked.
📖 Interactive Reader (Free Preview) ⚙ Try Demo Tools 📦 Download Free Sample📁 File Structure 10 files
📖 Documentation Preview README excerpt
Warmup Scheduler
Schedule and manage email warmup campaigns with gradual volume increase. Protect your sender reputation from day one on new domains or IP addresses.
Features
- Exponential ramp schedule — Follows ESP-recommended volume curves (5 to 10,000 emails over 29 days)
- Send window distribution — Spreads sends across business hours to look natural to spam filters
- Health monitoring — Auto-pauses campaigns when bounce rate > 5% or complaint rate > 0.1%
- Campaign state persistence — Saves progress to JSON so you can stop and resume anytime
- Batch calculation — Tells you exactly how many emails to send next and when
- History tracking — Full audit log of every batch, pause, and resume event
- Multiple commands — init, status, next-batch, record, resume, history, schedule
Requirements
- Python 3.10+
- No external dependencies (stdlib only)
Quick Start
# Initialize a new warmup campaign
python src/warmup_scheduler.py init --domain acme-corp.example.com --target 1000
# Check campaign status
python src/warmup_scheduler.py status
# Get the next batch to send
python src/warmup_scheduler.py next-batch
# Record results after sending
python src/warmup_scheduler.py record --sent 20 --bounced 0 --complaints 0
# View full campaign history
python src/warmup_scheduler.py history
# View the complete ramp schedule
python src/warmup_scheduler.py schedule
How It Works
1. Init: Creates a campaign state file with your target volume and domain. Sets day 1 of the ramp.
2. Ramp Schedule: Each day allows more emails. The default curve ramps from 5 (day 1) to 10,000 (day 29). You can customize this via the config.
3. Send Windows: Emails are distributed across 4 time windows (9am, 11am, 2pm, 4pm) to avoid triggering volume-based spam filters.
4. Health Checks: After each batch, the tool checks bounce and complaint rates. If either exceeds the threshold, the campaign auto-pauses and logs the reason.
5. Resume: After fixing deliverability issues, resume the campaign. It picks up where you left off.
Configuration
Key constants in warmup_scheduler.py:
| Constant | Default | Description |
|---|---|---|
DEFAULT_RAMP_SCHEDULE | 29-day curve | List of max emails per day (index = day - 1) |
... continues with setup instructions, usage examples, and more.