Automation

Self-Hosting Email: 6 Months In, 3 Things I Learned

· 7 min read · #releases #writing #automation #personal-automation

A real, honest account of running my own email server for 6 months. The 3 things I learned, the parts I would do differently, and the verdict on whether you should do it.

The setup, brieflyIn January, I moved my personal email from Fastmail (which I had been on for 4 years and liked) to a self-hosted setup on a Hetzner box: Postfix for SMTP, Dovecot for IMAP, Rspamd for spam filtering, a hand-rolled Let’s Encrypt renewal, and a daily backup script that is a slightly modified version of [the one in this site's automation post. Total monthly cost: about $5 for the box and $0 for the software. Total setup time: about 8 hours, mostly in one weekend.That is the setup. Here is what I learned in the six months since.Thing 1: the deliverability problem is not what you thinkThe thing I expected to be hard was running the mail server. Postfix is well-documented, Dovecot is well-documented, and the basic configuration is straightforward. The thing that turned out to be hard was making email I sent actually arrive in other people's inboxes.When I sent an email from my self-hosted domain, Gmail put it in spam. Outlook put it in spam. Yahoo put it in spam. iCloud put it in spam. The mail was being delivered, but it was being delivered to junk. I checked my IP reputation, my SPF record, my DKIM signature, my DMARC policy. All correct. I checked the actual headers of the rejected mail. The spam filter was scoring me on "low sending volume" and "newly observed sender."That is the deliverability problem. The big mailbox providers (Gmail, Outlook, iCloud, Yahoo) treat new sending IPs with suspicion. They do not have data about the IP, so they assume the worst. To get off the suspicion list, you have to send consistent, low-volume, clean email for weeks. The first month of self-hosting email is a slow climb out of the spam folder. By month three, the email started landing in the inbox most of the time. By month six, it lands in the inbox almost always.The fix is not technical. The fix is patience. The first 100 emails you send from a new IP will be junk. The first 1,000 will be mostly junk. The first 10,000 will be a mix. By 100,000, the IP has a reputation. That is the slow part, and there is no shortcut.If you decide to self-host email, accept that the first month will be embarrassing. Tell the people you email most often to check their spam folder. They will. You will feel like a 1998 sysadmin. You will get through it.Thing 2: backups are not optional, they are the difference between fine and ruinedThe second thing I learned is that email is the one workload where backups are not optional, they are the boundary between "I had a server failure" and "I lost every email I have sent or received since I started self-hosting."My existing backup script (the one I described in [the weekend backup post) covers the mail spool, the Dovecot configuration, and the Postfix configuration. It runs nightly, rotates after 30 days, and emails me if it fails. The setup was already there from the rest of my server work.What I added for email is an off-host copy. The nightly tarball gets rsynced to a Backblaze B2 bucket. The cost is about $0.05/month. The off-host copy is the part that would save me if the Hetzner box died completely. I have not had to use it yet, but I am glad it is there.Without the off-host copy, the failure mode is: box dies, mail spool dies, 6 months of email gone, recoverable from the recipient's mailbox if they kept it (most do, for at least 6 months) but not from mine. The on-host backup would not save me in a disk-failure scenario, because the on-host backup is on the same disk as the mail spool. The off-host copy is the real backup.If you self-host email, do the off-host copy. It is 10 minutes of setup and $0.05/month. The first time you need it, you will be glad you did. The cost of not having it is the cost of every email you have ever received, which is not a small cost.Thing 3: I do not actually want to manage a mail serverThe third thing I learned, six months in, is that I do not actually want to manage a mail server. The deliverability problem (thing 1) is mostly solved. The backup problem (thing 2) is solved. What is left is the steady-state maintenance: monitoring the queue, watching for failed deliveries, updating Postfix when a CVE drops, watching the disk usage, watching the spam filter's false-positive rate, dealing with the occasional "your email was rejected by recipient's server" support request, and the once-a-quarter "oh, the cert did not renew" fire drill.Each individual task is small. The cumulative task is not. I spend about 30 minutes a month on the mail server, which is more than I would prefer, and most of that time is not interesting problems. It is "I should check that this is still working" maintenance.That is the part the "self-host email" articles skip. The articles show you how to set up the server. They do not show you the steady-state time. The steady-state time is real, and it is the part that made me decide to go back to Fastmail at the end of the year if the maintenance burden does not decrease.The verdict I would give someone considering this: self-hosting email is a fun project. It teaches you about SMTP, deliverability, cert management, and the difference between "I sent the email" and "the email was delivered." The first month is rough. The maintenance is real. If you are doing it to learn, do it. If you are doing it to save $5/month, do not. The $5/month for Fastmail is one of the best deals in software, and the time you save is worth more than the money.What I would do differentlyIf I were starting over, I would set up the off-host backup on day one, not in month three. The cost of the late setup is not the setup itself. The cost is the three months of email I was not backing up off-site, which I would have lost if the box had died in February.I would also have used a different sending warm-up strategy. I sent a low, steady volume of email for the first month, which is what most guides recommend. What I would do instead is send a high volume in week one (e.g. newsletters to opted-in subscribers, batch transactional email) to build reputation faster, and then settle into the steady state. The high-volume week is risky if you have a bad reputation signal, but if your SPF, DKIM, and DMARC are all correct, the risk is small and the time savings are real.I would also have set up monitoring on day one. I added UptimeRobot checks in month two, which means I had about 6 weeks where the mail server could have been down without me knowing. The cost of the late setup was a couple of "did you get my email?" messages from people who had not, which I would have caught faster with monitoring.Who this is forSelf-hosting email is for people who want to learn how email works at the protocol level, who want full control over their data, and who have the time to spend 30 minutes a month on maintenance. It is not for people who want to save money (the savings are small, and the time cost is real), and it is not for people who need 99.99% uptime (a managed provider will always be more reliable than a single box you are running yourself).If you are considering it, the cost is $5/month for a Hetzner box and a weekend of setup. The benefit is learning how the thing you use every day actually works. The risk is the first month of spam-folder delivery, which is annoying but temporary.The honest partI am going to keep self-hosting for at least another 6 months, because I am enjoying the learning and the maintenance is not yet annoying enough to quit. At the end of the year, I will re-evaluate. If the maintenance stays at 30 minutes a month, I will keep going. If it creeps up to an hour a month, I will move back to Fastmail and use the time for something I actually enjoy.The lesson of the project is not "self-host email." The lesson is: small projects that teach you something are worth doing, even when the time cost is more than the money saved. The time is the cost. The knowledge is the benefit. The balance shifts project by project. For email, the balance is roughly even. For a static site, the balance is clearly positive. For a Nextcloud instance, the balance is clearly negative. The right answer depends on what you want to learn, not on what you want to save.Want the prompt pack that runs the maintenance?The Blog Writing Factory has a "research prompt" that is built for exactly this kind of project review. Feed it the maintenance log, get back a structured report, decide in 20 minutes whether to keep, replace, or kill the project. The audit is the system.Buy on Gumroad. $14

Send me the rough edges if you try it. I read every message.