[Zope] Proposal for mail-in to Zope

Richard Folwell richard@folwell.com
Thu, 1 Jun 2000 21:05:08 +0100


> 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
...)