a project by psimons
Postmaster desperately needs a mail spool. I need to come up with a good way to store meta information about queued messages. An sqlite database seems like a natural fit because I might want to do some nontrivial queries in there to figure out which messages to deliver (and where). On the other hand, interfacing with sqlite is a bit unpleasant, so instead I might want to write one big JSON file that contains all relevant information. That would certainly suffice for the first version ...
Last Hackweek, I managed to complete an esmtpd server that can receive incoming e-mail and write it into a mail spool: https://github.com/peti/postmaster. The server supports SMTP and ESMTP with full PIPELINING and STARTTLS extensions. In this Hackweek, I'd like to complete part that delivers messages to local users and/or to remote servers via SMTP. Another topic I'd like to tackle is to come up with a working strategy for regression testing the server.
Theoretically, Haskell should be perfect for implementing a network service daemon like smtpd. There is a whole bunch of mature libraries for network communication, dns, tls, and even parsing of RFC281. So all that stuff just needs to be tied together by a
main function. :-) It should be possible to come up with a daemon that can accept a simple ESMTP mail transfer and perform local delivery, say, via LMTP (which procmail supports). Once that's implemented, we a have a server that cat accept local mail from the Internet. From there, going to mail injection cannot be hard since we already have the LMTP code. I dunno ... it might be too ambitious a project, but I am interested in doing some system-level programming and I enjoy writing Haskell code, so I'll just give it a shot and see what happens.
Generally speaking, I see a niche in the MTA market, because the available mail servers tend to be too complex, i.e. they support too many features. Most sites have only moderate requirements and they don't need all kinds of funky header re-writing and a dozen milters and an RDBMS for storing the mail spool. If I can come up with a design that works well for all the use-cases that I personally have on my servers, then chances are that the resulting code will be useful to others too.
Looking for hackers with the skills:
This project is part of:
Hack Week 18 Hack Week 19
Update Haskell ecosystem in Tumbleweed to GHC-9.4.4 by psimons
[comment]: # (Please use the project descriptio...
Be the first to comment!