[Twisted-Python] [Request] IMAP Server Sample code
exarkun at divmod.com
exarkun at divmod.com
Wed Mar 3 16:57:20 MST 2004
On Tue, 02 Mar 2004 11:49:29 +0000, David Burton <david at zeos.org> wrote:
>Hi guys, I'm new to the list, but I've had a look through the site and
> the mailing list archives, looking for some sample code which would help
> me in setting up the basics of an IMAP server - specifically to get mail
> from a POP account (which is easy enough), store it in a database
> (again, easy enough), and set up the interface to the database messages
> (and possible other non-email goodies) using IMAP (currently not a clue).
> I've tried looking through the API and the source code, but I don't know
> what I should be returning from the likes of authenticateLogin to
> confirm (or refect logins), and what to return via listCapabilities (I'm
> currently . Any lists of which methods should generally work without
> overriding, which ones should be overridden, what needs to be returned,
> etc gratefully received.
twisted.protocols.imap4.IMAP4Server is written so that, in most cases, it need not be subclassed. The preferred way to implement a server is to implement the interfaces IMAP4Server depends on. The two required interfaces are IAccount and IMailbox, both of which are defined in twisted.protocols.imap4. There are several other optional interfaces as well. Ideally, accounts and mailboxes are hooked up to an IMAP4Server protocol instance via twisted.cred. Here is a brief example:
from twisted.cred import portal
from twisted.protocols import imap4
class Account:
__implements__ = (imap4.IAccount,)
# Actually implement the interface here
def logout():
# Cleanup logic goes here
class Realm:
__implements__ = (portal.IRealm,)
def requestAvatar(self, avatarID, mind, *interfaces):
if imap4.IAccount not in interfaces:
raise NotImplementedError
return imap4.IAccount, Account(avatarID), logout
p = portal.Portal(Realm())
# Contrive to have your ServerFactory's buildProtocol
# set the "portal" attribute of the IMAP4Server instance
# it creates to the `p' defined above.
For more information, refer to the cred and component howtos available on the Twisted website.
Jp
More information about the Twisted-Python
mailing list