Home Marketplace Email Deliverability Toolkit

Get out of spam.
Stay out.

Five Python scripts and a guide that fix deliverability in the right order. SPF, DKIM, DMARC and MX in one pass with the fix for each failure. A warmup ramp. Bounce classification that reads the RFC 3463 status code instead of guessing. A pre-send check. And the five blocklists that actually affect inbox placement. Nothing to install.

5Scripts
0Dependencies
8Provider DNS templates
3Ready-made templates

Instant download · Commercial licence, unlimited domains · Free updates for life · 7-day refund

Real output

Not pseudocode.
Actual runs.

Captured from running the scripts against live DNS, live blocklists and real bounce messages on 13 August 2026.

check_dns.py output showing SPF, DKIM, DMARC and MX results for a live domain
SPF, DKIM, DMARC and MX in one pass — with the SPF lookup count and the fix printed against every failure.
classify_bounce.py showing 5.1.1 as HARD and 5.7.26 as SOFT with the reasoning
5.7.26 looks permanent and isn't. Suppress on it and you delete good contacts because your own DKIM is broken.
preflight_check.py flagging trigger phrases and an unsubscribe link routed through the click tracker
The pre-send check catches the click-tracker rewrite that silently breaks one-click unsubscribe.
warmup_schedule.py output showing a geometric ramp from 10 to 100 emails a day
A geometric ramp, and the reminder that the cap is domain-wide rather than per mailbox.

The problem

Rewriting the subject line
won't fix it.

Deliverability is an authentication problem, then a reputation problem, and only then a content problem. Most people work that list backwards — they rewrite the subject line and A/B the preview text while their DMARC record doesn't exist and their SPF has twelve DNS lookups in it.

Gmail and Yahoo now require all three records from bulk senders. Missing any one of them means every message starts the delivery decision behind, no matter how well it's written.

Order — authenticate, warm up, clean, then write
Not — the other way round

What's inside

Five scripts,
zero installs.

01

check_dns.py — SPF, DKIM, DMARC and MX

One pass, with the specific fix for each failure. It counts your SPF DNS lookups — the limit is 10, and crossing it breaks authentication for every message, which happens the day you add one more tool rather than the day you set it up. Tries 25 DKIM selectors when you don't know yours, and knows that empty placeholder selectors are normal rather than a fault.

Exits — 0 clean / 1 needs fixing
Drops into — cron or CI
02

warmup_schedule.py — a ramp that looks like a business

Any start, any target, any number of days, exported to CSV. The curve is geometric rather than linear, because receivers score the shape of your sending. And it enforces the rule people get wrong: the cap is domain-wide, not per mailbox. Four mailboxes on one domain don't get four allowances.

Day 1 — 10 across all mailboxes
03

classify_bounce.py — HARD, SOFT or COMPLAINT

Reads the RFC 3463 status code first, because it's machine-readable; free-text matching is only the fallback. Getting this wrong costs money in both directions — suppress a soft bounce and you delete a reachable contact who was on holiday; keep mailing a hard bounce and you get the domain blocked.

Rule — only hard bounces suppress
04

preflight_check.py — run the draft before the list gets it

Trigger phrases, image-to-text ratio, link density, missing unsubscribe. And the one that bit us on a live campaign: a click tracker that rewrites the unsubscribe link, so one-click unsubscribe points at the tracker and silently fails. The recipient clicks, nothing happens, and the next step is a spam complaint.

Catches — the unsubscribe rewrite
05

blocklist_check.py — the five that matter

Spamhaus ZEN, SpamCop, Barracuda, SORBS and PSBL — not the ninety-odd lists that exist mainly to sell you a cleanup service. Being on ZEN blocks mail at most large providers; being on SORBS is largely informational, and the output says which is which.

Plus — what to do before requesting delisting
+

The guide and three templates

A written guide covering authentication, warmup, bounce handling, content and reputation recovery. Plus DNS records to copy with the correct include for eight providers, a suppression-list schema in SQL including why soft bounces need a separate table, and a four-email cold sequence that doesn't read like a template.

Format — Markdown + SQL

Who it's for

People who send email
and open a terminal.

Founders doing cold outreach

You're sending from your own domain and you'd rather not burn it in the first month.

Developers shipping transactional mail

Password resets and receipts that quietly land in spam cost more than campaigns do.

Agencies setting up client domains

Commercial licence covers unlimited domains, so it pays for itself on the second client.

Not a fit if you won't run a Python script. These are command-line tools. If you want a dashboard, buy a dashboard — this is deliberately not one.

Honestly

What this can't do.

!

No guarantee of inbox placement. Nobody can promise that — not a tool, not a consultant, not your provider. Receivers decide and change their minds without notice. What these scripts do is remove the known, controllable causes of filtering.

It won't rescue a purchased list, or a domain with a spam history. Sometimes a fresh domain is the cheaper answer, and the guide says so rather than selling you hope.

Not legal advice. CAN-SPAM, GDPR/PECR and CASL differ on consent, identification and opt-out. Check your obligations for the places you send into.

Does — remove known causes
Can't — promise an inbox

Questions

Before you buy.

Q

Why do my emails go to spam?

In order of how often it is the cause: missing or broken authentication, a sending domain with no reputation, a list with a high bounce rate, and only then the content. Gmail and Yahoo require SPF, DKIM and DMARC from bulk senders, so missing any one means every message starts the delivery decision behind. Fix them in that order — rewriting the subject line while DMARC does not exist changes nothing.

Q

What is the SPF 10 lookup limit?

SPF allows a maximum of 10 DNS lookups when evaluating your record. Every include, a, mx, ptr, exists and redirect counts, and includes nest — one include can consume four lookups by itself. Cross 10 and receivers return a permanent error, which fails SPF for every message you send. It is a silent failure that arrives the day you add one more sending tool, not the day you set the record up.

Q

What is the difference between a hard bounce and a soft bounce?

A hard bounce is permanent — the mailbox or domain does not exist, so suppress the address forever. A soft bounce is transient, such as a full mailbox or a temporary block, so retry a limited number of times before suppressing. The trap is that 5.7.1 and 5.7.26 are 5.x.x codes, which look permanent, but they mean your own authentication or reputation failed rather than the address being dead. Suppressing on those deletes good contacts.

Q

How do I warm up a new sending domain?

Start around 10 messages a day and multiply by roughly 1.2 daily rather than adding a fixed number, because receivers score the shape of your sending as much as the volume. Send on weekdays only during warmup, spread the day's messages across hours, and stop entirely if the bounce rate passes 5%. Crucially the cap is domain-wide, not per mailbox — four mailboxes on one domain share one allowance, because reputation attaches to the domain.

Q

Do I need to install anything to run these?

No. Everything runs on a stock Python 3.9 or newer with no packages to install. The DNS scripts use dnspython if you happen to have it and otherwise fall back to dig or nslookup, which macOS and Linux both ship. Every script exits 0 when clean and 1 when something needs fixing, so they drop straight into a cron job or a CI step without modification.

Q

Can I use this on client domains?

Yes. The licence is single-operator commercial and covers unlimited domains and unlimited client projects, including paid work. You can run the scripts on as many client domains as you like and use the DNS templates and guidance with them. You may not resell or redistribute the files themselves.

Fifteen minutes. Then send with confidence.

Instant download. Commercial licence, unlimited domains. Free updates for life. Seven-day refund if it isn't useful.

Launch price · Going to $69 after the first 20 sales

Where this came from

These scripts came out of building and running a real cold-outreach system — the warmup ramp, the IMAP bounce parsing and the click-tracker bug are all things that went wrong first. Read why cold emails land in spam, or if you'd rather hand the whole thing over, that's the day job.