Email from Scratch in a Week
I am going to keep this short, as I want to do an even longer write up and video about the actually project itself in soon. But, I am public announcing that I am going to undertake an extremely major project over the course of the next week. I am going to build and release a Mail Transfer Agent by Friday, from scratch. Now I am slightly cheating because over the last two months I have built two MTAs and they both had really major flaws and I did not have a good workflow at all. I want to take what I learned from that experience and start again.
I am giving myself a time limit, because I want to do more in life, like a lot more, I feel I am no where near my potential as a person, and I have found the problem space of email to be the perfect outlet, that is for the next discussion, but I am going to start a company solely focused on email, and building email infrastructure. An MTA will be our first product; will this MTA, be that product, maybe? Maybe not? However, The learning will be really important. Let me tell you a bit about what I plan on building!
As I said, I will be building an MTA, its job is to receive, send, and manage emails. It does this through two primary protocols that I will support: SMTP and IMAP(sorry no POP3). It will be designed modularly, like Postfix, except the core will be extremely tiny. The actual functionality will be implemented as WebAssembly modules, meaning yes, you can write them in any language! The concept is simple, the core MTA receives an SMTP message then does nothing; If you have no modules loaded, it does nothing. Well, not exactly, core’s job is to be very opinionated and handle the worst parts of email: SSL/StartTLS, DKIM, dmarc, SPF, validation, etc… And it hands to modules an API to deal with the actual message content. From there the modules can discard, create, transform, and route messages, with the core being able to final send out messages once they are placed in a ready to be sent queue.
If you are excited and want to hear more about the project, send me an email at email@robertismo.com