Building LaravelSMTP.com — a service that gives Laravel apps one-line email setup across SES, Mailgun, Postmark, SendGrid, and raw SMTP — forced me to learn deliverability at a depth most developers never need. The summary: inbox placement is earned infrastructure, not luck.
Gmail and Yahoo now require this stack outright for bulk senders. No SPF+DKIM+DMARC means no inbox — the conversation ends there.
Password resets and invoices must never share a sending domain with newsletters. Marketing complaints poison the reputation that your critical mail depends on. Use subdomains (mail.example.com for transactional, news.example.com for campaigns) so reputations stay independent.
SES is by far the cheapest and rock-solid once you leave sandbox, but you build your own monitoring. Postmark has the best transactional deliverability and tooling out of the box. Mailgun and SendGrid sit between, with stronger marketing features. The pattern I implemented in LaravelSMTP: route through one abstraction so you can switch providers without touching application code.
Process bounce and complaint webhooks and suppress those addresses immediately. Hard-bouncing the same address repeatedly is the fastest way to a blocklist. Track delivery, open, bounce, and complaint rates per domain — when a number moves, you want to know that day, not when a customer says 'we stopped receiving signups'.