Skip to content
Pre-release. HostCraft is in testing and not yet for sale. These docs describe the current build and may change. Join the waitlist to hear when it launches.

IP Warmup

IP warmup is the process of gradually increasing sending volume on a fresh IP address so that receiving mail servers learn to trust it before you send at full volume. Skipping warmup or rushing it will result in widespread deferrals and RBL listings that are difficult to recover from.

Before starting warmup, verify all of the following:

  • The IP is assigned to the server and bound to Postfix's inet_interfaces.
  • A PTR (reverse DNS) record is set for the IP, pointing to the server's hostname. Confirm with:
    Terminal window
    dig -x <ip> +short
  • SPF, DKIM, and DMARC records are published for every domain that will send from this IP. Confirm with:
    Terminal window
    hostcraftd mail dns-check --domain=example.com
  • Postfix is configured and healthy:
    Terminal window
    postfix check
    systemctl is-active postfix
  • The deliverability dashboard is accessible at Admin -> Mail -> Deliverability.
  • You have an estimate of the target daily send volume for this IP after warmup completes.

The default ramp doubles or quintuples volume each week. Do not skip ahead; the schedule exists to build trust incrementally.

Week Daily send limit
1 50
2 200
3 1,000
4 5,000
5 20,000
6 50,000
7+ Target volume

If your target volume is below 50,000/day you can stop early once you comfortably exceed it with a bounce rate under 2%.

Via the UI: Admin -> Mail -> Deliverability -> Warm up IP -> enter the IP and target volume -> Start.

Via the API:

Terminal window
curl -X POST https://panel.example.com/api/v1/mail/deliverability/warmup \
-H "Authorization: Bearer $HOSTCRAFT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ip": "203.0.113.10", "target_volume": 100000}'

The daemon stores the schedule and begins enforcing the per-day cap on Postfix's per-destination rate limit.

Check the deliverability dashboard every day during warmup:

  1. Open Admin -> Mail -> Deliverability -> select the IP.
  2. Review the three key metrics for the past 24 hours:
    • Bounce rate: must stay below 2%. Above 5% requires immediate pause (see below).
    • RBL listings: any listing requires immediate investigation.
    • Sender Score: aim for 70+ by week 3, 90+ by week 6.
  3. Check for deferred messages piling up in the queue:
    Terminal window
    postqueue -p | head -40
    hostcraftd mail queue --status=deferred

If bounce rate exceeds 5%, pause the warmup immediately before the sending cap resets the next day.

Via the UI: Deliverability -> the IP -> Pause warmup.

Via the API:

Terminal window
curl -X POST https://panel.example.com/api/v1/mail/deliverability/warmup/203.0.113.10/pause \
-H "Authorization: Bearer $HOSTCRAFT_TOKEN"

The schedule freezes at the current week. The schedule does not advance during a pause. You will resume at the same week you paused.

While paused, investigate the bounce cause:

  1. Pull the bounce log:
    Terminal window
    journalctl -u postfix --since="1 hour ago" | grep -i "bounce\|reject\|deferred"
  2. Check for RBL listings on the dashboard. If listed, proceed to the recovery steps in the Verification section.
  3. Identify whether the bounces are hard (bad addresses) or soft (temporary rejections from receiving servers). Hard bounces above 2% indicate a list hygiene problem; soft bounces indicate reputation or configuration issues.
  4. Fix the root cause before resuming.

Via the UI: Deliverability -> the IP -> Resume warmup.

Via the API:

Terminal window
curl -X POST https://panel.example.com/api/v1/mail/deliverability/warmup/203.0.113.10/resume \
-H "Authorization: Bearer $HOSTCRAFT_TOKEN"

The schedule resumes from the week it was paused on. Monitor closely for the first 48 hours after resuming.

If you decide not to use this IP for sending (wrong IP provisioned, IP disposed, etc.), delete the warmup schedule:

Terminal window
curl -X DELETE https://panel.example.com/api/v1/mail/deliverability/warmup/203.0.113.10 \
-H "Authorization: Bearer $HOSTCRAFT_TOKEN"

This removes the schedule and the daily cap entirely. It does not affect any sends that already went out.

At the end of each week, run a full deliverability check:

  • Run mail-tester.com on a sample message from this IP. Target score of 9/10 or above by week 3.
  • Confirm no RBL listings via the dashboard or manually:
    Terminal window
    hostcraftd mail rbl-check --ip=203.0.113.10
  • Confirm bounce rate for the week was under 2%.
  • Confirm Sender Score is trending upward week over week.

Warmup is complete when you have sent at the target volume for two consecutive days without bounces exceeding 2% and without any RBL listings.

If the dashboard shows an RBL listing during warmup:

  1. Pause the warmup schedule immediately.
  2. On the dashboard, click the listing to get the delisting URL for that RBL.
  3. Follow the delisting process (each RBL has its own form; typical turnaround is 24 to 72 hours).
  4. Investigate why the listing happened: high bounce rate, spam complaint, misconfigured SPF or DKIM, or a compromised sending account.
  5. Fix the root cause.
  6. Document the incident on the server's postmaster page (Admin -> Mail -> Postmaster) so it is visible for future operators.
  7. Resume warmup only after delisting is confirmed.

There is no rollback for sends that have already gone out. If warmup is going badly:

  1. Pause the schedule to stop new volume.
  2. Move sending for affected domains to a different (already-warmed) IP if one is available.
  3. If no alternative IP exists, reduce send volume to the previous week's limit and monitor for 48 hours before attempting to advance again.