This is the announcement for the first release of qxmail. It's ready for
experimentation and personal use, but since it hasn't been banged on by
thousands yet maybe not on an important server. There are also a few modules
which may be of more general use, see below.
From the ANNOUNCEMENT file:
This is the 0.0.1 version of qxmail. 'qxmail' is not intended to be the
final name, so if someone can think of something better...
This is a webmail program, written in Python and based on the Quixote
framework. It is intended to be simple and fast. It uses IMAP for
communication with a mail server, handles complex MIME messages, safely
displays (but does not send) HTML mail, caches folders and messages locally,
and has a powerful address book / alias feature. Users can use normal
browser bookmarks to bookmark folders and messages. It requires no
modification to your webserver and should run with any webserver that does cgi
(though non-apache servers are untested), but performance will be better if
you use Apache's mod_scgi.
Currently, it does *not* use secure IMAP logins, so you shouldn't use it to
connect to remote IMAP mailboxes as yet. The machinery is already there, so
it shouldn't be hard to add, but I have no running examples. Anyone
interested in this should contact me.
There are also a few modules which may have interest outside of this app (if
there is interest, I can package them seperately):
'clean_html.py' is an HTML cleaner which aims to filter arbitrary HTML to make
like <title>, can optionally replace images with links, and modifies embedded
path names. See the clean_html.filter docstring for details, and
ui.mailbox.filter_html for an example of use.
The 'imap' package provides high-level access to an IMAP mailbox. It presents
a mailbox/folder/message hierarchy, and all elements are loaded from the
server lazily. It will automatically try to resume broken connections.
An example of usage:
con = imap.imap.Imap('login', 'passwd', host='foo.bar')
print con.box.keys() # all folders
print con.box['INBOX'] # msgs in inbox
for msg in con.box['INBOX'].values():
# each msg looks like an email.Message.Message, but its parts are
# fetched lazily
msg = con.box['pictures'].values()[-1]
It uses not the standard python imaplib, but imap_con, a simplified ripoff.
According to me, it's easier to use and more practical, though at a slightly
lower level. It's currently not very documented, but it has methods for IMAP
commands, and returns ([untagged Responses], tagged Response). See the module
docstring for a translation of the imaplib example.
This version is in the Public Domain. Quixote, the scgi programs, Spark, and
other parts by other people use their own respective licenses, of course.
For more info, see the README, which is available, as is the source, at: