Some alternatives we considered and didn't go for: - write something in Zope to listen for SMTP connections, effectively large portions of an MTA. This would be cool but painful.
Providing a basic SMTP server is not at all difficult to do in Python. I did a cut-down one once as part of a test system, and extending it would be straightforward (the cut-downness was not in structure, just did not bother to implement the SMTP commands I did not need - the underlying design was a state-machine [natch!] - however one problem I did come across was that it was not possible to implement the state machine completely from the RFC, which contains ambiguities). Some potential troublespots in re-visiting this work: - error handling, if done properly, might cause some problems (the state machine helps a lot here, but I cannot guarantee that I did not miss something obvious) - emails nowadays can be very large, with MIME encoded movies and stuff. Each received email has to be stored somewhere - can we (would we want to?) reliably store this kind of data in the ZODB?
- pull mail from a POP or IMAP server. This had the downside that it introduced polling into the system (slow) and also required something to happen on a schedule, which doesn't happen in Zope yet.
Funny you should mention this. I am considering moving my domain from the current ISP to a friend's server. One of my current ISP's services that I use is webmail, so I was looking at how this could be done after the move. Sending mail through a web interface is a doddle, but what about viewing received emails? I had got as far as realizing that something could be built on Python's support for POP3 - use POP3 to collect the headers of currently available messages, create a web page displaying them, with each entry linked to a page that would download (without deleting) an individual email. I think that my current ISP's webmail system must be doing something like this. So far it looks fairly straightforward to implement. Richard (who now realizes that he has to find that old Python SMTP server code - now I wonder where I put it ...)