Make a Website

How to Send 10,000 Emails Without Landing in Spam

Bulk email that actually arrives. SPF, DKIM and DMARC explained simply, why your server IP will fail, list warm-up, and the rules that keep you off blacklists.

An email campaign being delivered to the inbox

Sending 10,000 emails is easy. Getting 10,000 emails delivered is the hard part, and it has almost nothing to do with the sending software.

Gmail, Outlook and Yahoo decide whether to show your message, and they decide before they read a word of it. This guide is about passing that check.

Start here: do not send from your own server

The single most common mistake. Someone installs a mailing script on their VPS, sends 10,000 emails, and almost none arrive.

Here is why:

  • Your server IP has no sending reputation. Gmail has never seen it. An unknown IP suddenly sending thousands of messages looks exactly like a compromised machine.
  • Cheap VPS IP ranges are often already blacklisted because of what a previous tenant did.
  • Most providers block port 25 outright.
  • Building a sending reputation takes months of consistent, low-volume, complaint-free sending.

Use a sending service. They maintain the IP reputation, handle the technical negotiation with inbox providers, and tell you what happened to each message.

Which service?

ServiceFree tierBest for
Brevo (ex-Sendinblue)300 / dayNewsletters, good free tier
Amazon SES—Cheapest at volume, about $0.10 per 1,000
MailgunTrialDevelopers, strong API
SendGrid100 / dayTransactional email
Mailchimp500 contactsMarketing, easiest editor

For 10,000 emails: Brevo if you want a visual editor and simple pricing. Amazon SES if you are comfortable with configuration and want the lowest cost — 10,000 messages costs about one dollar.

The three DNS records that decide everything

These prove you are allowed to send as your domain. Without them your mail goes to spam no matter which service you use. All three are DNS records added at your domain registrar or host.

SPF — who may send for this domain

A list of servers permitted to send your mail.

Type:  TXT
Name:  @
Value: v=spf1 include:spf.brevo.com ~all

Your sending service tells you the exact include: value.

You may only have one SPF record. Two records means both fail. If you already have one, merge the includes into it:

v=spf1 include:spf.brevo.com include:_spf.google.com ~all

DKIM — a signature proving the mail was not altered

Your service generates a key and gives you a record to publish:

Type:  TXT
Name:  mail._domainkey
Value: k=rsa; p=MIGfMA0GCSq... (a long string)

Copy it exactly. One missing character and the signature fails silently.

DMARC — what to do when a check fails

Type:  TXT
Name:  _dmarc
Value: v=DMARC1; p=none; rua=mailto:you@yourdomain.com

Start with p=none, which means "report but deliver". You receive reports showing who is sending as your domain. After a few weeks of clean reports, tighten to p=quarantine and later p=reject.

Do not start at p=reject. If anything is misconfigured you will block your own mail and not know why.

Check all three

Send one message to mail-tester.com. It gives a score out of ten and names exactly what is missing. Do not send a campaign below 8/10.

Warm up before you send in bulk

A domain that has never sent email suddenly sending 10,000 messages is the clearest spam signal there is. Build up gradually:

DaySend about
1–350 per day
4–7200 per day
8–141,000 per day
15–213,000 per day
22+10,000 per day

Send to your most engaged contacts first. Opens and replies teach the inbox providers that your mail is wanted, which is what reputation actually is.

Your list matters more than your content

Spam filters weigh behaviour more heavily than words. Three numbers decide your fate:

  • Bounce rate. Keep under 2%. Above 5% and services will suspend you.
  • Complaint rate. Keep under 0.1% — that is one complaint per thousand.
  • Open rate. Consistently low opens signal an unwanted list.

Clean the list before the first send

  1. Run it through a verification service. ZeroBounce, NeverBounce and similar cost a few dollars per thousand and remove dead addresses before they bounce.
  2. Delete role addresses — info@, admin@, support@. They complain more and engage less.
  3. Remove anyone who has not opened anything in a year. Painful, and it will improve your delivery immediately.

Never buy a list

Purchased lists are full of spam traps — addresses that exist only to catch people who buy lists. Hitting one gets your domain blacklisted, and unlike a suspended account, a blacklisted domain follows you. You cannot fix it by changing service.

The message itself

Less important than reputation, but it still matters:

  • Send from a real person — habib@yourdomain.com, not noreply@. Reply-to addresses that work improve reputation.
  • A plain subject line. No ALL CAPS, no rows of exclamation marks, no "FREE!!!".
  • Include a plain-text version. HTML-only mail scores worse.
  • Keep images to a minimum. An email that is one big image is a classic spam pattern.
  • A visible unsubscribe link. Legally required in many places, and hiding it produces complaints, which are far more damaging than unsubscribes.
  • Avoid link shorteners. bit.ly links are heavily abused and filtered.

Bulk email is regulated in most markets, and the rules are simple enough:

  • Only email people who agreed. Signing up for your service is consent; having a business card is not.
  • Include a working unsubscribe link and honour it within a few days.
  • Include a real postal address — required by CAN-SPAM in the US.
  • Do not disguise who you are in the from field or subject.

If you email anyone in the EU or UK, GDPR applies: explicit opt-in, a record of when they consented, and easy deletion on request.

Sending from WordPress

WordPress uses the PHP mail() function by default, which shared hosts frequently block or flag. This is why order confirmations and password resets vanish.

Fix it with an SMTP plugin — WP Mail SMTP or FluentSMTP. Point it at your sending service, and even ordinary site email starts arriving.

For newsletters from inside WordPress, Newsletter or MailPoet both send through an external service rather than your server.

Common problems

Everything goes to spam

Check SPF, DKIM and DMARC first — it is nearly always one of them. Test at mail-tester.com and fix whatever it names.

Gmail delivers, Outlook does not

Outlook is stricter and keeps its own reputation list. Register at the Smart Network Data Service and check whether your sending IP is flagged.

"Message rejected: 550 5.7.1"

The receiving server refused it, usually because of SPF failure or a blacklist. The bounce message normally names the reason — read it rather than resending.

The sending account was suspended

Bounce or complaint rate went too high. Clean the list properly and contact support with what you changed. Services usually reinstate once.

My domain is on a blacklist

Check at MXToolbox. Each blacklist has its own delisting form. Fix the cause first, because relisting is faster the second time.

WordPress emails do not send at all

PHP mail() is blocked. Install an SMTP plugin.

A realistic plan for 10,000 emails

  1. Week 1 — set up the service, add SPF, DKIM and DMARC, score 9+ at mail-tester
  2. Week 1 — verify and clean the list
  3. Weeks 2–4 — warm up on the schedule above
  4. Week 4 — send to the full list in batches of 2,000, a few hours apart
  5. After — watch bounces and complaints, and remove non-openers before the next send

Rushing this is what causes the "I sent 10,000 emails and nobody got them" outcome.

Where to go next

Questions people ask

Why do all my emails go to spam?
Almost always missing SPF, DKIM or DMARC records. Without them, inbox providers cannot verify you are allowed to send as your domain. Send one message to mail-tester.com — it scores you out of ten and names exactly what is missing.
Can I send bulk email from my own VPS?
You can, but almost none will arrive. Your server IP has no sending reputation, cheap VPS IP ranges are often already blacklisted, and most providers block port 25. Use a sending service that maintains IP reputation for you.
What is the cheapest way to send 10,000 emails?
Amazon SES at roughly $0.10 per thousand, so about one dollar for 10,000 messages. Brevo is easier to use and has a free tier of 300 a day. The cost is trivial either way — deliverability is what actually matters.
What are SPF, DKIM and DMARC?
Three DNS records. SPF lists which servers may send mail for your domain. DKIM adds a cryptographic signature proving the message was not altered. DMARC tells receivers what to do when a check fails. All three are needed for reliable delivery.
How long should I warm up a new sending domain?
About three weeks. Start at roughly 50 emails a day, then 200, then 1,000, then 3,000, reaching 10,000 by week four. Send to your most engaged contacts first, because opens and replies are what build reputation.
Is it safe to buy an email list?
No, and it is the fastest way to permanent damage. Purchased lists contain spam traps — addresses that exist only to catch buyers. Hitting one blacklists your domain, and unlike a suspended account, a blacklisted domain follows you to every service.
What bounce rate is acceptable?
Under 2 percent. Above 5 percent most services will suspend the account. Complaints should stay under 0.1 percent, which is one per thousand. Verify and clean the list before the first send rather than learning this from a suspension.
Why do my WordPress emails never arrive?
WordPress uses the PHP mail function by default and shared hosts commonly block or spam-flag it. Install an SMTP plugin such as WP Mail SMTP or FluentSMTP and route mail through a real sending service.
Gmail delivers my email but Outlook does not. Why?
Outlook applies stricter filtering and keeps its own reputation data. Register with the Smart Network Data Service to see whether your sending IP is flagged there, and make sure DMARC is in place, which Outlook weighs heavily.
Do I need permission to email someone?
Yes in most markets. Someone signing up for your service is consent; having their business card is not. You also need a working unsubscribe link, a real postal address, and honest sender details. Emailing anyone in the EU or UK brings GDPR obligations too.

Written by Habib Baloch

I build Android apps, websites and Ubuntu servers, and write down exactly how I did it.

Ask me about this guide →