I'm building a mail server
No, you didn't go back in time to 1995. This is 2021 and I'm attempting to build a mail server.
Isn't this a solved problem?
Yes, it is. Postfix, Dovecot, SpamAssassin, and their ilk are great, mature pieces of software.
Then why would you want to do it?
A few reasons:
- I think I'd learn a lot from doing it. Grokking and implementing protocols like SMTP or IMAP should translate to future projects.
- Everyone uses email, meaning the server should be easy to test.
- The project has low stakes since I have about ten other email addresses on (likely) Postfix/Dovecot servers.
- I want to learn more about writing and deploying my own self-hosted services.
- The solutions above are written in C. I want to write this project in Elixir.
An email server feels like an ideal Elixir application: it requires high availability and resiliency, but not high performance. Sure, Postfix and Dovecot are similarly reliable, but I'm willing to bet that the Elixir equivalent would be much simpler to write and maintain.
Additionally, I find the Elixir deployment story a bit difficult to understand. I could shift the status quo on deployment if I create and write about a project that's easy to customize, run, and manage. Plus, building a self-hosted email solution might encourage more people to quit abusive/centralized platforms like Gmail, which I want.
If nothing else, it's a good learning experience with a language I plan to use for the foreseeable future.
Where's the project?
Here it is. I've decided to call it MExA for now. Additionally, I've created the Benign Technology project to group this server and similar future projects together. You can follow updates there, but I might post updates here occasionally.
What's a "MExA"?
Wikipedia calls a generic email agent a "MxA", where "x" is a wildcard. Examples of email agent types include Mail Delivery Agents (MDAs) and Mail Transfer Agents (MTAs). Elixir uses the ".ex" file extension for source code; thus, MExA.
What's the Benign Technology project?
That's a topic for another post. 😄
How can I help?
First, thanks for reading this far! If you think this project is a good idea (or not), send me an email. I'd like to hear your thoughts.
My ambitions for this project are humble: I want to learn how to build an application that I'll use every day. Until I get to that point, I don't plan on accepting patches or pull requests. After that, I may open the project for other contributors to add extensions and fix bugs — if there's enough interest. If it sucks or nobody cares, I'll move on to something that's more useful and only update MExA when I need to.