IP Warming Tools
The Email Deliverability Library provides comprehensive tools for IP warming - the process of gradually increasing email volume from a new IP address to establish a positive sender reputation.
Creating IP Warming Plans
Create a customized IP warming schedule based on your target daily volume:
from email_deliverability import DeliverabilityManager
# Initialize deliverability manager
manager = DeliverabilityManager()
# Create a warming plan for 50,000 emails per day over 30 days
warming_plan = manager.create_ip_warming_plan(
daily_target=50000,
warmup_days=30
)
# Print the schedule
print("IP Warming Schedule:")
print("-" * 50)
print(f"{'Day':<5}{'Date':<12}{'Volume':<10}{'% of Target':<15}")
print("-" * 50)
for day in warming_plan['schedule']:
print(f"{day['day']:<5}{day['date']:<12}{day['volume']:<10}{day['percent_of_target']:<15}%")
# Print recommendations
print("\nBest Practices:")
for i, rec in enumerate(warming_plan['recommendations'], 1):
print(f"{i}. {rec}")
You can adjust the warmup_days parameter to make the warming process faster or slower depending on your needs.
Hourly Distribution
For optimal deliverability, distribute your daily email volume throughout the day:
from email_deliverability.ip_warming.scheduler import IPWarmingScheduler
# Create a scheduler
scheduler = IPWarmingScheduler()
# Get hourly distribution for a specific day's volume
day_10_volume = warming_plan['schedule'][9]['volume'] # Day 10 volume
hourly_volumes = scheduler.distribute_volume_by_hour(day_10_volume)
# Print hourly sending schedule
print(f"Hourly sending schedule for day 10 (total: {day_10_volume} emails):")
print("-" * 50)
print(f"{'Hour':<5}{'Emails':<10}{'% of Daily':<15}")
print("-" * 50)
for hour, volume in hourly_volumes.items():
percentage = (volume / day_10_volume) * 100
time_slot = f"{hour:02d}:00"
print(f"{time_slot:<5}{volume:<10}{percentage:.1f}%")
Warming Multiple IPs
If you need to warm up multiple IPs simultaneously:
# Create a multi-IP warming plan
ip_count = 3
total_daily_target = 150000 # Total volume across all IPs
multi_ip_plan = scheduler.warm_multiple_ips(
ip_count=ip_count,
daily_target=total_daily_target
)
# Print summary of multi-IP warming
print(f"Warming {ip_count} IPs to handle {total_daily_target} emails daily")
print("-" * 60)
for ip, schedule in multi_ip_plan.items():
ip_target = schedule[-1]['volume'] # Final day volume = target
print(f"{ip}: Target volume of {ip_target} emails per day")
print(f" Day 1: {schedule[0]['volume']} emails")
print(f" Day 15: {schedule[14]['volume']} emails")
print(f" Final day: {ip_target} emails")
Monitoring IP Warming
Track and analyze your IP warming progress:
from email_deliverability.ip_warming.monitor import WarmingMonitor
# Initialize a warming monitor
monitor = WarmingMonitor(target_volume=50000)
# Load your warming plan
monitor.load_plan(warming_plan)
# Sample sending data (date, volume sent)
sent_volumes = [
("2025-04-01", 100),
("2025-04-02", 250),
("2025-04-03", 500),
("2025-04-04", 750),
("2025-04-05", 1200),
# ... more days ...
]
# Track progress against plan
progress = monitor.track_progress(sent_volumes)
print(f"Warming Progress: {progress['overall_adherence']}% adherence to plan")
print(f"Status: {progress['status']}")
# Sample performance metrics
performance_data = {
"bounce_rate": 1.2,
"complaint_rate": 0.05,
"open_rate": 22.5,
"click_rate": 3.8,
"delivery_rate": 98.8
}
# Monitor key performance metrics
metrics = monitor.monitor_key_metrics(performance_data)
print(f"\nWarming Health: {metrics['health']}")
if metrics['issues']:
print("\nIssues:")
for issue in metrics['issues']:
print(f"- {issue['message']}")
print("\nRecommendations:")
for rec in metrics['recommendations']:
print(f"- {rec}")
# Check blacklists during warming
blacklist_check = monitor.check_blacklist_during_warming()
if blacklist_check['warming_impact'] != 'none':
print(f"\n⚠️ Blacklist Impact: {blacklist_check['warming_impact']}")
print("Recommendations:")
for rec in blacklist_check['recommendations']:
print(f"- {rec}")