Stop running Postfix in 2026
Why I deleted six servers' worth of mail config and never looked back.
I deleted my Postfix config last month and I've never been happier.
Some context. I have a small fleet of Linux boxes that run cron jobs, build agents, deployment scripts. They send email. Status reports, deploy notifications, alerts when a backup fails. The kind of thing every DevOps shop has.
For years, the canonical answer for "how do I send transactional email from a Linux box" has been: install Postfix, configure a smarthost, set up DKIM, hope nothing breaks. I had this exact setup, lovingly maintained, on six servers.
Last month I replaced all of it with nylas email send.
Why Postfix is overkill for transactional sends
Postfix is great. It's also configured to be a full mail server, and it brings the full mail server problem set with it:
- 200+ config directives in
main.cf - DKIM signing daemon (OpenDKIM) as a separate process
- TLS cert management (or relying on opportunistic TLS, which is its own can of worms)
- Bounce handling
- Queue management on disk
- Periodic security advisories that need patching
If you're running a real mail server (incoming + outgoing, multiple users, vacation responders, the works), Postfix is the right answer. But if all you need is "this script needs to email me when the backup fails," Postfix is doing 50x more than required.
What I switched to
brew install nylas/nylas-cli/nylas # macOS
# or:
curl -fsSL https://cli.nylas.com/install.sh | bash # Linux
nylas auth config --api-key <YOUR_KEY>
nylas email send \
--to oncall@example.com \
--subject "Backup failed at $(hostname)" \
--body "Run timestamp: $(date -u +%FT%TZ). Check /var/log/backup.log."
That's it. No Postfix, no smarthost, no DKIM keys to rotate. The CLI uses HTTPS to deliver the message, which means it works through firewalls that block SMTP ports. CI containers, sandboxes, GitHub Actions runners, anywhere outbound 443 is open.
What I miss
I'll be honest, a few things.
- Local queueing. Postfix queues messages locally if the relay is unreachable. The CLI does not. If the API is down, the send fails. For most transactional cases this is fine (the cron job can retry). For audit-critical sends, you'd want a local buffer.
- Header surgery. With Postfix you can rewrite headers in arbitrary ways via
header_checks. The CLI lets you set common headers but not arbitrary ones. - The smug satisfaction of having
dovecot-imapdandpostfix-mtaboth green insystemctl. Genuinely.
What I don't miss
- Reading Postfix's hieroglyphic logs.
- Forgetting to renew an LE cert and discovering it via
Connection refusedat 4am. - The annual "wait, is OpenDKIM still maintained?" panic.
- Six servers' worth of
main.cfdrift.
Practical advice
If you're running Postfix to send transactional email and nothing else:
- Audit what your scripts actually do. Most just call
mailorsendmailwith a body and recipient. - Replace those calls with
nylas email send(one-line drop-in for most). - Decommission the local mail daemon.
- Reclaim the cognitive overhead.
Full setup walkthrough: Send email from any Linux server in 60 seconds.
Some readers will, correctly, point out that Postfix isn't the only option here. sendmail, exim, msmtp all do the relay-only job better. They're right. But the broader argument holds: if you're a developer writing a deploy script in 2026, you shouldn't need to touch any mail daemon to send a status email. Done.
Command references:
nylas email send— send emailnylas email list— read messagesnylas mcp install— connect to AI assistants- Full command reference
Related posts:
