Best practices for email. Sourced, dated, and short enough to use.
How mailbox providers actually decide where your email goes, what the research has measured, and what to do about it — every claim linked to the page it came from.
Email best practices. Researched guides to getting email read, not just delivered.
14 guides

Lifecycle email
Marketing email: types, rules and examples
What marketing email is, how it differs from transactional mail, seven types with examples, and the US, EU and Canadian rules, each cited to its regulator.
14 min readUpdated
marketing email email marketing emails emails for email marketing types of marketing emails marketing email examples marketing email rules
Lifecycle email
Contact email: which address to publish, and where
Which contact email to publish: one address per job (hello@, support@, security@), where each belongs, shared-mailbox routing, auto-replies and spam.
10 min readUpdated
contact email contact emails business email address contact us email address hello@ vs info@
Authentication
What is SMTP? How email actually gets delivered
SMTP, explained: the EHLO-to-DATA handshake, ports 25, 465 and 587, STARTTLS, reply codes like 421 and 550, and where SPF, DKIM and DMARC fit in.
15 min readUpdated
smtp what is smtp smtp port smtp server smtp relay smtp error 550 smtp reply codes smtp vs imap
Deliverability
How to get out of the Gmail Promotions tab
Why Gmail files your email under Promotions, what Google documents, what research has measured, and the steps that move mail toward Primary. Myths flagged.
12 min readUpdated
gmail promotions tab how to get out of promotions tab move emails from promotions to primary why are my emails going to promotions gmail primary tab
Deliverability
Why are my emails going to spam? How to fix it
Why emails land in spam: authentication, complaints, list quality and reputation, what Gmail, Yahoo and Outlook document, and a step-by-step fix.
13 min readUpdated
why are my emails going to spam emails going to spam how to stop emails going to spam why do my emails go to junk emails going to spam in gmail
Deliverability
Gmail bulk sender requirements, plus Yahoo and Outlook: the checklist
Every Gmail bulk sender requirement, with Yahoo's and Outlook's side by side: who counts, SPF, DKIM, DMARC, one-click unsubscribe, spam rate, error codes.
11 min readUpdated
gmail bulk sender requirements yahoo sender requirements gmail sender guidelines outlook high volume sender requirements bulk sender requirements checklist
Lifecycle email
Welcome email best practices: how to write one that gets read
Welcome email best practices from M3AAWG, Google and Yahoo: timing, subject lines, preheaders, a sample welcome sequence, and what benchmarks measured.
12 min readUpdated
welcome email best practices how to write a welcome email welcome email sequence welcome email subject lines welcome email examples
Deliverability
Email list cleaning: how to sunset inactive subscribers
How to define inactive subscribers when Apple inflates opens, run a re-engagement campaign, sunset the rest, and suppress rather than delete under GDPR.
11 min readUpdated
email list cleaning inactive subscribers sunset policy email how to clean your email list re-engagement email campaign suppression vs deletion gdpr
Deliverability
How to set up one-click unsubscribe (RFC 8058)
Add the List-Unsubscribe and List-Unsubscribe-Post headers RFC 8058 defines, sign them with DKIM and handle the POST. Exact headers, code and tests.
13 min readUpdated
one-click unsubscribe list-unsubscribe-post rfc 8058 list-unsubscribe header list-unsubscribe=one-click gmail one-click unsubscribe requirement
Deliverability
How to lower your email spam complaint rate
What a good email spam complaint rate is, how Gmail and Yahoo measure it, why people report mail as spam, and the steps that bring the rate down.
12 min readUpdated
email spam complaint rate spam complaint rate gmail spam rate postmaster tools spam rate good spam complaint rate how to reduce spam complaints
Deliverability
Email domain warm up and IP warmup, step by step
How to warm up a new sending domain or IP: what Gmail, Microsoft, Yahoo and M3AAWG publish, an example schedule, the signals to watch, and the myths.
12 min readUpdated
email domain warm up ip warmup how to warm up a new domain ip warming schedule dedicated ip warm up domain warming
Deliverability
Google Postmaster Tools, explained: every dashboard and what to do
What Google Postmaster Tools shows, how to set it up, what each dashboard and metric means, what v2 changes, and what to do when a number goes wrong.
12 min readUpdated
google postmaster tools postmaster tools gmail postmaster tools postmaster tools spam rate google postmaster tools v2 postmaster tools compliance status
Authentication
DMARC p=reject: how to move from p=none safely
A staged plan to move DMARC from p=none to p=reject: read aggregate reports, fix alignment, quarantine, then reject, and what RFC 9989 changed.
13 min readUpdated
dmarc p=reject dmarc policy dmarc p=none to p=reject dmarc quarantine vs reject dmarc rollout dmarc pct tag
Deliverability
Should you use an email subdomain for marketing?
When to send campaigns from a subdomain like news.example.com: what it isolates, what it still shares with your domain, and DMARC, alignment and BIMI.
11 min readUpdated
email subdomain for marketing marketing email subdomain send marketing email from a subdomain subdomain for email marketing subdomain sender reputation dmarc subdomain policy
Send from your stack. A complete sample for the language you write in, from key to delivered message.
12 guides
- Node.jsJavaScript · TypeScriptSend email from Node.js with the fetch it already has: one POST with four headers, an id back, and every delivery event on a webhook.
- Next.jsReact · TypeScriptSend email from Next.js in a route handler or a server action: one fetch, the key read on the server, an id back for every message.
- PythonPythonSend email from Python over HTTPS with httpx: post one message, read the id back and follow every delivery event on a signed webhook.
- DjangoPythonSend email from Django without an SMTP backend: one HTTPS call in a view or a task, an id back, and delivery reported on a webhook.
- FastAPIPythonSend email from FastAPI with one httpx client: build it once at startup, await it from a route, and get an id back for every message.
- Ruby on RailsRubySend email from Ruby on Rails over HTTPS instead of SMTP: one Net::HTTP call from a service object, an id back, delivery on a webhook.
- LaravelPHPSend email from Laravel with the Http facade instead of an SMTP mailer: one POST, an id back, and every delivery event on a webhook.
- GoGoSend email from Go with net/http and encoding/json: one POST to the API, an id back, and delivery events on a signed webhook.
- BunTypeScriptSend email from Bun with the fetch it already ships: one POST, four headers, an id back, and delivery reported on a signed webhook.
- DenoTypeScriptSend email from Deno with built-in fetch and Deno.env: one POST, no dependency, an id back and every delivery event on a webhook.
- Cloudflare WorkersTypeScript · edgeSend email from Cloudflare Workers with one fetch: the key comes off env, not process.env, and every message returns an id you can follow.
- Supabase Edge FunctionsTypeScript · edgeSend email from Supabase Edge Functions with one fetch: set the key as a secret, read it with Deno.env, and take an id back per message.
Getting started. From an empty account to a delivered email, and the rules every request follows.
6 guides
Docs
Quickstart
From an empty account to a delivered email in six steps: create a key, add and verify a domain, send, then read the message back.
Docs
Authentication
Authenticate with a bearer API key and the required User-Agent header, and read what each refusal means before you retry it.
Docs
Idempotency
Retry a send without sending it twice: how an idempotency key is scoped, how long it is remembered, and what a replay answers.
Docs
Errors
Every error the Rasket API returns, the HTTP status each name carries, and what to do about it before you try the call again.
Docs
Node SDK
The rasket package for Node.js: typed from the API's own OpenAPI document, and retrying only the calls where a retry is safe.
Docs
Python SDK
The rasket package on PyPI: the Node client's methods in snake_case, over httpx, typed and under the same retry rules.
Put the practice into practice
Verified domains, one-click unsubscribe and delivery events for every message — the parts of these guides you would otherwise build.