Reputation Is Everything
Your email sender reputation is a score that mailbox providers (Gmail, Outlook, Yahoo) assign to your sending domain and IP. A good reputation means your emails reach the inbox. A bad one means they go straight to spam - or get rejected entirely.
You cannot buy a good reputation. You have to build it.
The Warm-Up Schedule
If you are sending from a new domain, do not blast 50,000 emails on day one. Mailbox providers will flag you immediately. Start slow and increase volume gradually.
Recommended Warm-Up Plan
| Day | Daily Volume | Notes |
|---|---|---|
| 1-3 | 50 | Send to your most engaged users |
| 4-7 | 100-200 | Expand to active users |
| 8-14 | 500-1,000 | Monitor bounce rate closely |
| 15-21 | 2,000-5,000 | Check DMARC reports |
| 22-28 | 5,000-10,000 | Approaching full volume |
| 29+ | Full volume | Continue monitoring |
Warm-Up Rules
- Send to engaged users first. People who have recently opened or clicked your emails are least likely to mark you as spam.
- Keep content consistent. Do not switch from welcome emails to promotional blasts mid warm-up.
- Monitor every day. Watch your bounce rate, complaint rate, and delivery rate throughout the warm-up.
- Slow down if metrics slip. If your bounce rate goes above 2% or complaints above 0.1%, reduce volume and investigate.
Key Metrics to Monitor
Bounce Rate
Target: under 2%
Hard bounces mean the address does not exist. Soft bounces mean temporary failures. Both hurt your reputation if the rate is too high.
// Check your bounce rate after each batch
const bounceRate = bounces / totalSent;
if (bounceRate > 0.02) {
console.warn("Bounce rate too high:", (bounceRate * 100).toFixed(1) + "%");
// Pause sending and clean your list
}
Fix high bounce rates:
- Validate email addresses at signup
- Remove hard bounces immediately (SMTPfast does this automatically via suppression lists)
- Use double opt-in for new signups
Complaint Rate
Target: under 0.1%
A complaint happens when a recipient clicks "Report Spam" in their email client. This is the most damaging signal for your reputation.
// Suppress users who complain - never email them again
async function handleComplaint(recipient) {
await db.suppressionList.create({
data: { email: recipient, reason: "complaint", created_at: new Date() },
});
}
Reduce complaints:
- Only send emails users expect
- Include a clear, working unsubscribe link
- Do not send too frequently
- Never buy or scrape email lists
Delivery Rate
Target: above 98%
Your delivery rate is the percentage of emails accepted by receiving servers. Anything below 98% means something is wrong.
Open Rate
Target: 60%+ for transactional emails
Low open rates on transactional emails (password resets, order confirmations) suggest your emails are landing in spam rather than the inbox.
Handling Bounces Correctly
Not all bounces are equal. Handle each type differently:
| Bounce Type | Action | Timeline |
|---|---|---|
| Hard bounce | Suppress immediately | Instant |
| Soft bounce (1st) | Retry once | After 4 hours |
| Soft bounce (2nd) | Retry once more | After 24 hours |
| Soft bounce (3rd) | Suppress | Immediate |
def handle_bounce(recipient, bounce_type, bounce_count):
if bounce_type == "hard":
suppress_email(recipient, reason="hard_bounce")
return
if bounce_count >= 3:
suppress_email(recipient, reason="repeated_soft_bounce")
return
# Schedule retry for soft bounce
schedule_retry(recipient, delay_hours=4 * bounce_count)
Avoiding Spam Traps
Spam traps are email addresses operated by anti-spam organizations. There are two types:
Pristine traps - Addresses that were never used by a real person. If you are sending to these, you got the address from a purchased or scraped list.
Recycled traps - Old addresses that were abandoned and later repurposed as traps. If you are sending to these, you are not cleaning your list.
How to Avoid Them
- Never buy email lists. This is the fastest way to destroy your reputation.
- Use double opt-in. Require users to confirm their email address before you send to it.
- Remove inactive subscribers. If someone has not opened or clicked in 6 months, stop sending to them.
- Clean your list regularly. Use an email validation service to catch invalid and risky addresses.
Separate Your Email Streams
Do not send marketing and transactional emails from the same domain. If your marketing emails get flagged, your transactional emails suffer too.
Transactional: [email protected]
Marketing: [email protected]
This way, a spam complaint on a marketing email does not affect your password reset deliverability.
Monitoring Tools
Google Postmaster Tools
Free tool from Google that shows your domain's reputation with Gmail. Set it up at postmaster.google.com. You will see:
- Domain reputation (High, Medium, Low, Bad)
- Spam rate
- Authentication success rates
- Encryption percentage
SMTPfast Dashboard
The SMTPfast dashboard shows your delivery metrics in real-time: sent, delivered, bounced, opened, and complained. Set up webhook alerts for unusual patterns.
DMARC Reports
If you set up DMARC with a rua tag, you will receive aggregate reports showing who is sending email on behalf of your domain. Review these weekly to catch unauthorized senders.
Recovery Plan
If your reputation drops, here is how to recover:
- Stop sending immediately. Continuing to send with a bad reputation makes it worse.
- Identify the cause. Check bounce rates, complaint rates, and DMARC reports.
- Clean your list. Remove all hard bounces, complaints, and inactive addresses.
- Fix authentication. Verify SPF, DKIM, and DMARC are all properly configured.
- Warm up again. Start from a low volume and gradually increase, just like a new domain.
- Be patient. Recovery takes 2-4 weeks of consistent, clean sending.
Checklist
- Domain warm-up plan in place
- Bounce rate monitored and under 2%
- Complaint rate monitored and under 0.1%
- Hard bounces suppressed immediately
- Soft bounces suppressed after 3 failures
- Double opt-in for new signups
- Separate domains for transactional and marketing
- Google Postmaster Tools configured
- DMARC reports reviewed weekly
- Inactive subscribers removed after 6 months
Ready to get started?
Start sending transactional email today. Free to start, no credit card required.
Get Started for FreeRelated Posts
One approval instead of five DNS records: Domain Connect on SMTPfast
If your domain is on Cloudflare, SMTPfast can publish its sending records, and separately the inbound MX, through Domain Connect. You review each set on Cloudflare's screen, approve, and the records are written for you. Here is how it works, what gets written, and what to do when your DNS lives elsewhere.
Logs API and webhook deliveries: answer 'did it send?' without opening the dashboard
Two additions for the debugging side of email: the event log behind the Logs page is now an API, and every webhook has a delivery log with attempts, responses, automatic retries and a retry button.