At 1 million emails a day, which is 30 million a month, three routes exist: Amazon SES at roughly $3,000 a month in send fees plus $500 to $1,000 in dedicated IPs, a negotiated enterprise contract with SendGrid, Mailgun or Netcore at $9,000 to $18,000 a month, or a self-run fleet of five dedicated servers at a one-time build plus $1,000 to $2,000 a month in hosting. All three need 20 to 40 warmed IPs, 10 to 14 weeks of staged warm-up, and 1 to 2 full-time engineers. The infrastructure bill is no longer the biggest line. Payroll is.
No relay publishes a price at this volume, and the architecture is a fleet, not a server. One tier down, the best SMTP for 100K a day is the comparison that applies.
The three routes at 1M a day
| Route | Monthly cost | IPs | Setup | Growth cost |
|---|---|---|---|---|
| Amazon SES, pay as you go | ~$3,000 + $500-1,000 IPs | 20-40 at $24.95 each | 6-10 weeks engineering | linear per email |
| SendGrid Premier | $10,000-18,000, negotiated | block included, vendor-warmed | 2-4 weeks | tier step |
| Mailgun Enterprise | $9,000-16,000, negotiated | block included | 2-4 weeks | tier step |
| Netcore or SparkPost enterprise | $8,000-14,000, negotiated | block included | 2-4 weeks | tier step |
| Self-run fleet, 5 servers | $1,000-2,000 hosting only | 20-40, yours | 10-14 weeks with warm-up | flat |
Two facts drive the decision. Relay contracts cost 5 to 10 times the hosting bill of a fleet, and every route needs the same engineers anyway.
The SES numbers are the only public ones. Amazon lists $0.10 per 1,000 outbound on pay as you go and $0.16 per 1,000 on Essentials for the first 10 million a month, with standard dedicated IPs at $24.95 each (SES pricing). 30 million at $0.10 is $3,000, thirty IPs another $748. Call it $3,750 a month before a line of your own code exists.
Throughput maths at 1 million a day
The daily headline is not what you build against, and the gap gets worse as volume climbs.
| Measure | Figure | What it means for the build |
|---|---|---|
| Per day | 1,000,000 | the headline |
| Per hour, averaged | ~42,000 | only if you trickle all day |
| Per second, averaged | ~12 | a single Postfix box does this idle |
| Realistic peak rate | 150-250/sec | a 1M blast clears in 70-110 minutes |
Twelve a second sounds like nothing. It is nothing. A single 4 vCPU box does 12 a second while running a backup. The number that sizes the fleet is 200 a second sustained with a 3 million message queue behind it, which is four to six MTAs behind a shared broker, because one machine carrying that load has no redundancy and no maintenance window.
How many IPs, and why 20 to 40
| Daily volume | Warmed IPs | Per-IP daily load | Notes |
|---|---|---|---|
| 100,000 | 3-4 | 25,000-33,000 | one IP can be lost |
| 1,000,000, tight | 20 | 50,000 | throttles on every peak |
| 1,000,000, comfortable | 30 | ~33,000 | the shape I would buy |
| 1,000,000, heavy Microsoft mix | 40 | 25,000 | Microsoft throttles hardest |
A warmed IP with a clean record carries 25,000 to 35,000 a day across a mixed Gmail, Microsoft and Yahoo audience before deferrals start. That range does not move with your volume, so IP count scales linearly while nothing else does. Per-receiver detail is in how many emails per day per IP.
Your receiver mix decides where in the band you sit. A B2C list that is 70% Gmail runs at 30 IPs. A B2B list heavy on Microsoft 365 needs 40, since Microsoft applies the tightest per-IP hourly throttles and recovers slowest.
Headroom is the other reason. At 30 IPs, losing two to a Spamhaus CSS listing costs 7% of capacity. At 20 IPs it pushes the remaining 18 to 55,000 a day each, the pressure that causes the next listing.
The architecture: a fleet, not a server
At 100,000 a day you buy a server. At 1 million you build a system with parts that do not exist one tier down.
| Component | Minimum at 1M/day | Comfortable | Why |
|---|---|---|---|
| MTA nodes | 4 | 5-6 plus a standby | 200/sec peak, plus patching without downtime |
| Dedicated IPs | 20 | 30-40 | per-IP hourly throttles at Gmail and Microsoft |
| Injection queue | 1 shared broker | per-stream priority | campaigns must not starve transactional |
| Suppression store | 1 shared database | replicated, fast lookup | every node sees a bounce instantly |
| Sending domains | 4 subdomains | 6-10, sharded by stream | isolate marketing from transactional |
| Bounce infrastructure | dedicated return-path host | separate MX and parser fleet | 2% of 1M is 20,000 bounces a day |
| Feedback loops | Microsoft JMRP, Yahoo CFL | plus Postmaster Tools API hourly | complaints arrive per IP, act same day |
| Monitoring | 4xx spike alerting | per-IP and per-domain dashboards | a throttled IP overnight costs 30,000 sends |
Three of those are what teams skip and then regret.
Dedicated bounce infrastructure. A 2% bounce rate is 20,000 bounce messages a day. The return-path domain needs its own MX, its own host and a parser writing into suppression within seconds. Run bounces back into the sending boxes and a bounce storm competes with outbound delivery for CPU.
Domain sharding. One subdomain carrying 30 million a month puts all your reputation in one basket. Split marketing, transactional, notifications and per-brand streams, each with its own DKIM selector and DMARC reporting address. See subdomain vs root domain.
Per-receiver rate control. A global send rate hits Gmail's, Microsoft's and Yahoo's separate walls at once. You need per-destination connection limits, message rates and adaptive backoff on 4xx: transport maps in Postfix, native config in PowerMTA or KumoMTA. A 1 million a day fleet is the 100K a day design times five with a shared suppression layer.
The warm-up problem nobody plans for
You cannot warm 30 IPs in 8 weeks from zero, and it is an audience limit rather than a throughput limit. Warm-up traffic has to be opened to build reputation, and your engaged segment is finite. Splitting week-one volume across 30 cold IPs gives each one a few hundred thin, low-engagement sends a day, which teaches receivers nothing good about any of them.
| Stage | Weeks | IPs live | Daily total | What you send |
|---|---|---|---|---|
| 1 | 1-3 | 6-8 | 5,000 to 60,000 | most engaged 10% of the list only |
| 2 | 4-6 | 14-16 | 60,000 to 250,000 | engaged 30%, first full campaigns |
| 3 | 7-10 | 22-26 | 250,000 to 600,000 | broaden segments, watch Microsoft |
| 4 | 11-14 | 30 | 600,000 to 1,000,000 | full list, peak-day rehearsal |
Staged introduction is the fix. Bring 6 to 8 IPs to full health, then add the next group while the warmed ones carry real traffic and take the reputation load. Anyone quoting 6 weeks for 30 cold IPs has not done it. Freeze the ramp on any deferral spike, and never pad warm-up volume with unengaged addresses to hit the day's number. The per-IP schedule is at our IP warm-up schedule.
The one real advantage of an enterprise contract is skipping this. Negotiate the IP block as vendor-warmed on day one and you save three months. Get it in the contract, not the sales call.
Ops staffing, the biggest line item
| Function | SES | Enterprise contract | Self-run fleet |
|---|---|---|---|
| Initial build | 300-500 hrs | 40-80 hrs | included in a managed build |
| Warm-up, 30 IPs | 10-14 weeks, yours | vendor-warmed if negotiated | 10-14 weeks, planned |
| Bounce and suppression | build it, 150-250 hrs | included | configured, reconcile weekly |
| Event ingestion, 30M/month | your SNS pipeline | vendor dashboards | your logs, your pipeline |
| Weekly monitoring | 8-12 hrs | 4-8 hrs | 8-12 hrs |
| MTA patching, queue health | not applicable | not applicable | 8-12 hrs a month |
| Headcount | 1.5-2 FTE | 1 FTE | 1-1.5 FTE |
One and a half FTE at a $70,000 to $120,000 loaded cost is $105,000 to $180,000 a year, larger than the SES bill and comparable to a SendGrid contract. Infrastructure is no longer what you are optimising.
That is the honest argument for a relay contract. If your team is one person who also owns three other systems, $150,000 a year buys a vendor's deliverability team and an SLA. A fleet only saves money when someone owns the fleet.
The 12-month cost, all three routes
| Route | Year 1 | Year 2 | Not in the number |
|---|---|---|---|
| Amazon SES, pay as you go, 30 IPs | ~$45,000 | ~$45,000 | 300-500 hrs build, 1.5-2 FTE ongoing |
| Netcore or SparkPost enterprise | ~$96,000-168,000 | commit renegotiated | overage, validation add-ons |
| Mailgun Enterprise | ~$108,000-192,000 | rises with volume | overage at up to 2x base rate |
| SendGrid Premier | ~$120,000-216,000 | rises with volume | expert services billed separately |
| Self-run fleet, 5 servers, 30 IPs | build + ~$18,000 hosting | ~$18,000 hosting | 1-1.5 FTE, 10-14 week warm-up |
Over 10x between cheapest and most expensive, and none of it is about email quality. It is about who does the work and who carries the risk.
Two contract details move real money. The annual commit is sized to your peak, so a seasonal business pays peak rates through its quiet months. And overage defaults to double the base rate on most enterprise paper, punishing the exact growth that got you here. Negotiate overage at or below base, in writing. What 10 million a month costs covers the same mechanics one tier down.
Where BulkEmailSetup fits, honestly
Our top tier is rated at 200,000 emails a day per unit, so 1 million a day is five units, not one. I would rather say that plainly than pretend one server covers it. Five units is 5 servers and up to 75 IPs, more than you need, so size the IP count to your receiver mix. Hosting runs $1,000 to $2,000 a month with no per-email fee.
What five units does not include is the platform above the MTAs: campaign software, the shared suppression database, the event pipeline and the person watching the dashboards. Same work SES demands, minus six months building sending infrastructure Amazon already sells.
The recommendation
| Your situation | Pick | Why |
|---|---|---|
| Strong platform team, sending is a solved problem elsewhere | Amazon SES | ~$45,000/year, you build everything around it |
| One overloaded engineer, mail cannot break | SendGrid or Netcore contract | $100,000+/year buys a vendor's deliverability team |
| Seasonal volume, peaks 4x the average | SES or a fleet | never sign a commit sized to your peak |
| A named owner exists and cost matters | Self-run fleet, 5 servers | ~$18,000/year hosting, no per-email fee |
| Already at 300K a day and growing | Fleet, start warming now | 30 IPs take 10-14 weeks, start before you need them |
If a renewal quote just crossed $100,000, the arithmetic is simple. At 30 million a month you are paying rent on IPs and a reputation that stay with the vendor the day you leave. The per-email model is good value at 100,000 a month and the largest avoidable line on your bill at 30 million.
The one thing that changes my answer is compliance load. Google's sender guidelines require SPF, DKIM, DMARC, TLS, valid PTR records, one-click unsubscribe and a spam rate below 0.30%, with 0.10% as the number to hold. At 30 million a month, 0.10% is 30,000 complaints. If nobody will watch that daily, buy the contract, because a fleet nobody owns burns 30 IPs faster than any bill would have hurt.
How BulkEmailSetup helps
We build the dedicated route as a one-time job: your own servers and IPs, full SPF/DKIM/DMARC/PTR configuration, MTA tuning with per-receiver throttling and adaptive backoff, automated bounce and feedback-loop handling on separate return-path infrastructure, and a staged warm-up plan sized for your peak day. The IPs are yours, so there is no shared pool to protect and no policy team deciding whether 30 million a month is too much risk for their other customers.
Basic starts at $549 one-time, covering 1 SMTP server, 3 dedicated IPs, 25,000 emails/day and unlimited contacts. Higher tiers scale to 15 IPs and 200,000 emails/day, so 1 million a day is five top-tier units. See pricing and tell us your receiver mix so the IP count is sized properly.
Frequently asked questions
What is the best SMTP for 1 million emails per day?
Amazon SES is cheapest on paper at roughly $3,000 a month in send fees plus $500 to $1,000 for 20 to 40 dedicated IPs, but you build the whole platform around it. A negotiated SendGrid, Mailgun or Netcore contract runs $9,000 to $18,000 a month and hands you tooling plus a support SLA. A self-run fleet of five dedicated servers is a one-time build plus $1,000 to $2,000 a month in hosting.
How much does it cost to send 1 million emails a day?
Between about $3,500 and $20,000 a month. SES at $0.10 per 1,000 pay-as-you-go is $3,000 in send fees for 30 million, and dedicated IPs add $24.95 each. Enterprise relay contracts at a negotiated $0.30 to $0.60 per 1,000 land at $9,000 to $18,000. A five-server dedicated fleet has no per-email fee at all, just hosting and an engineer.
How many IPs do I need to send 1 million emails a day?
20 to 40 warmed IPs. At 30 IPs each one carries about 33,000 a day, which sits inside what a warmed IP with a clean record moves into Gmail and Microsoft without deferrals. Fewer than 20 pushes every IP past 50,000 a day and you will hit hourly throttles on every campaign peak.
What sending rate does 1 million a day need?
1 million a day averages about 42,000 an hour or 12 messages a second, but nobody sends flat for 24 hours. Size the fleet for 150 to 250 messages a second so a 1 million recipient campaign clears in 70 to 110 minutes. Average throughput is the wrong number to build against at any volume.
How long does it take to warm up 30 IPs?
10 to 14 weeks using staged introduction, not 8. You cannot ramp 30 cold IPs in parallel because your engaged-audience volume is finite and warm-up traffic needs opens. Bring 6 to 8 IPs online per stage, hold each stage for 2 to 3 weeks, and buy pre-warmed IPs from the vendor if you are on a contract.
Do I need a full-time engineer for 1 million emails a day?
Yes, 1 to 2 FTE on any route. On SES that team builds bounce processing, suppression, event ingestion and reputation alerting from scratch. On a contract they own list hygiene, feedback loops and the vendor relationship. On a self-run fleet they own warm-up, queue health and MTA patching.
Will Amazon SES let me send 1 million emails a day?
Yes, after quota increases. SES sending limits are raised by request and 1 million a day is routine for them, but the account still goes under review when the complaint rate approaches 0.10% or bounces exceed 5%. At 30 million a month, 0.10% is 30,000 complaints, and one bad segment gets you there in an afternoon.



