IP Warmup for a New VPS Mail Server: Avoid the Spam Folder
You just spun up a fresh VPS, configured Postfix and Dovecot, got SPF, DKIM, and DMARC all passing, and sent your first real campaign — and it landed in spam. Everything looks technically correct, yet Gmail and Outlook still shove your mail into the junk folder. The missing piece isn't a DNS record. It's reputation, and a brand-new IP simply doesn't have any.
Symptom: perfect DNS, mail still in spam
This shows up a few different ways once a new mail-sending IP goes live:
- Gmail delivers to spam with no bounce and no error — the message just doesn't show up in the inbox.
- Outlook/Microsoft 365 recipients report mail going to Junk, or it never arrives and there's no NDR to explain why.
- A few messages get through fine, then delivery quietly drops off after you send a larger batch.
- Google Postmaster Tools shows your domain or IP reputation as "Low" or "Bad" a day or two after you start sending.
The frustrating part is that mail-tester.com or a manual header check often scores 9/10 or 10/10. SPF, DKIM, and DMARC alignment aren't the problem — inbox providers just don't trust an IP with zero sending history yet, so they route it to spam by default until it proves itself.
Cause: reputation is earned, not configured
Gmail, Outlook, and Yahoo build a reputation score for every sending IP and every sending domain based on history: volume sent, how consistent that volume is day to day, how many recipients open or reply, and — critically — how many mark it as spam or how many messages bounce. A new IP has none of that history, so it starts at a neutral-to-suspicious baseline. Send a large volume from it immediately and you look exactly like a spammer that just rented a fresh IP to dodge a blocklist, because that's a real and common pattern providers actively defend against.
Three things make it worse:
| Mistake | Why it hurts reputation |
|---|---|
| Blasting your full list on day one | Sudden volume from an unknown IP is the single strongest spam signal providers look for. |
| Sending to a stale or purchased list | High bounce and complaint rates on a new IP tank your reputation before it has a chance to build. |
| Reusing an IP with prior baggage | Some VPS providers recycle IPs. If a previous tenant burned it sending spam, you inherit that history — check it before you assume the IP is clean. |
Fix: warm the IP up on a ramp-up schedule
Before sending a single marketing or bulk email, confirm the fundamentals are actually in place — warmup won't fix a broken authentication setup, it only fixes reputation.
- SPF includes your VPS IP:
v=spf1 ip4:YOUR.VPS.IP.HERE -all(or~allwhile you're still testing). - DKIM is signing outbound mail — check headers with
opendkim-testkeyor a tool like mail-tester.com. - DMARC exists, even a soft
p=nonepolicy, so you get aggregate reports back. - Reverse DNS (PTR) on the IP resolves to your mail server's hostname, and that hostname resolves back to the IP (forward-confirmed rDNS).
- The IP isn't already on a blocklist — check it at mxtoolbox.com/blacklists before you start.
Once those are solid, ramp volume up gradually instead of sending everything at once. There's no single official number from any provider, but this schedule works reliably in practice for a new dedicated IP:
| Day | Daily volume | Notes |
|---|---|---|
| 1-2 | 25-50 emails | Send to your most engaged contacts only — people who open and reply reliably. |
| 3-4 | 100-200 | Keep it to engaged recipients; avoid anything that looks like a cold list. |
| 5-7 | 300-500 | Start mixing in a broader (but still real, opted-in) audience. |
| Week 2 | Double every 2-3 days | Only increase if bounce rate stays under 2% and complaints under 0.1%. |
| Week 3-4 | Ramp to full volume | By now the IP should have enough history that normal sending patterns are safe. |
A few rules make this actually work:
- Send consistently, not in bursts. A steady daily pattern builds trust faster than one huge day followed by silence.
- Start with your best recipients. People who've emailed you before, opened your last few messages, or are internal test accounts across Gmail/Outlook/Yahoo. Their engagement is a strong positive signal early on.
- Watch bounce and complaint rates daily during the ramp, not weekly. A spike on day 3 is easy to fix; the same spike discovered on day 20 has already done damage.
- Never mix warmup with a purchased or scraped list. That combination is close to guaranteed to burn the IP before it's even warm.
If you're relaying through a transactional provider (SendGrid, Mailgun, Amazon SES) instead of sending directly from the VPS, most of them offer a built-in IP warmup feature on dedicated IPs — use it rather than hand-rolling the schedule, since they already tune it against real inbox provider behaviour.
Prevention: keep the reputation you built
- Set up Google Postmaster Tools before you start warming up, so you can see reputation and spam-rate trends from day one instead of guessing.
- Keep your list clean — remove hard bounces immediately and suppress repeat soft-bounce addresses after a few attempts.
- Make unsubscribing genuinely easy. A complaint costs far more reputation than an unsubscribe does, and a hidden or broken unsubscribe link pushes people toward hitting "Report spam" instead.
- If volume needs are ongoing and serious, use a dedicated sending IP per use case (transactional vs marketing) so one bad campaign doesn't tank delivery for password resets and order confirmations too.
- Re-warm after a long gap. An IP that's been idle for a month or more has partially decayed reputation — treat a return to sending like a smaller version of the original ramp-up.
None of this replaces getting SPF, DKIM, and DMARC right first — warmup is what happens after authentication is already solid, not instead of it. If a fully-warmed IP suddenly starts landing in spam, that's a different problem: check for a fresh blocklist listing rather than assuming the reputation reset itself.
Frequently asked questions
How long does IP warmup actually take?
Budget 2-4 weeks for a dedicated IP sending real volume. A low-volume server (a few hundred emails a day, mostly transactional) can reach a stable reputation faster, sometimes in under two weeks, because the daily volume never gets far from what the ramp schedule calls for.
Do I need to warm up a shared IP too?
No — a shared IP (common on cPanel shared hosting or a shared sending pool) already carries reputation from every other domain using it. The tradeoff is you're also exposed to their sending behaviour. Warmup only applies to a dedicated IP that's yours alone.
What if I only send a handful of transactional emails a day?
Low, steady transactional volume (password resets, order confirmations) rarely needs a formal ramp schedule — the natural volume is already gentle. Just make sure SPF/DKIM/DMARC and PTR records are correct before you start, since those matter regardless of volume.
Can I speed up warmup by buying warmup services or bots?
Automated warmup services that simulate opens and replies exist, but many inbox providers have gotten better at detecting synthetic engagement, and it can backfire. Real engagement from real recipients on a genuine ramp schedule is slower but far more reliable.
My IP was used by someone else before me. How do I check its history?
Look it up on mxtoolbox.com/blacklists and Google's Postmaster Tools once you're sending. If it shows a bad reputation immediately despite a clean warmup, ask your VPS provider for a different IP — a previous tenant likely burned it.