Guides and tutorials
Practical, copy-pasteable tutorials based on the setup we run in production.
Why are my emails going to spam?
Why are my emails going to spam? Work through this checklist: SPF, DKIM, DMARC alignment, reverse DNS, blocklists, reputation, content and list hygiene.
SPF too many DNS lookups: how to count them and fix the permerror
SPF too many DNS lookups means your record needs more than 10 and fails with permerror. How to count lookups, remove waste, flatten safely or use subdomains.
How to build a self-hosted email server with Postfix on Ubuntu
Build a self-hosted email server on Ubuntu 26.04: Postfix, OpenDKIM, Dovecot 2.4 SASL on port 587, Let's Encrypt, fail2ban, DNS, PTR, testing and warm-up.
Reverse DNS for email: PTR, FCrDNS and HELO alignment
Reverse DNS for email explained: set a PTR record for your sending IP, make it match an A record (FCrDNS) and your HELO name, then check it with dig.
How to migrate from SendGrid to a self-hosted mail server
Migrate from SendGrid step by step: inventory, DNS while both run, switching your app to SMTP, suppression lists, gradual warm-up, fallback and cleanup.
How to migrate from Resend to a self-hosted mail server
Migrate from Resend step by step: DNS while both run, Resend SDK to SMTP, React Email over SMTP, suppression data, gradual warm-up, fallback and cleanup.
How to set up an SPF record
How to set up SPF record entries for your domain: list every sender, publish one TXT record, choose -all or ~all, stay under 10 lookups and test.
How to set up DMARC
How to set up DMARC: get SPF and DKIM aligned first, publish a p=none record at _dmarc with rua reporting, read the reports, then tighten the policy safely.
How to set up DKIM
How to set up DKIM: generate a 2048-bit key, publish the selector._domainkey TXT record, sign mail with OpenDKIM or your provider, and test it properly.
Gmail and Yahoo bulk sender requirements, and how to meet each one
Gmail bulk sender requirements explained: SPF, DKIM, DMARC, an aligned From, one-click unsubscribe and complaints under 0.3%, with the exact setup for each.
How to warm up a new email IP and domain
IP warm up for a new mail server or domain: a week-by-week schedule, who to send to first, how to rate-limit in Postfix, and what to watch before you scale up.
Moving DMARC from p=none to p=reject without losing real mail
Get to DMARC p=reject safely: a phased rollout from p=none through quarantine, how to read aggregate reports, how pct works and when to set sp= for subdomains.