
``smtpd`` --- SMTP Server
*************************

This module offers several classes to implement SMTP servers.  One is
a generic do-nothing implementation, which can be overridden, while
the other two offer specific mail-sending strategies.


SMTPServer Objects
==================

class class smtpd.SMTPServer(localaddr, remoteaddr)

   Create a new ``SMTPServer`` object, which binds to local address
   *localaddr*.  It will treat *remoteaddr* as an upstream SMTP
   relayer.  It inherits from ``asyncore.dispatcher``, and so will
   insert itself into ``asyncore``'s event loop on instantiation.

   process_message(peer, mailfrom, rcpttos, data)

      Raise ``NotImplementedError`` exception. Override this in
      subclasses to do something useful with this message. Whatever
      was passed in the constructor as *remoteaddr* will be available
      as the ``_remoteaddr`` attribute. *peer* is the remote host's
      address, *mailfrom* is the envelope originator, *rcpttos* are
      the envelope recipients and *data* is a string containing the
      contents of the e-mail (which should be in **RFC 2822** format).


DebuggingServer Objects
=======================

class class smtpd.DebuggingServer(localaddr, remoteaddr)

   Create a new debugging server.  Arguments are as per
   ``SMTPServer``. Messages will be discarded, and printed on stdout.


PureProxy Objects
=================

class class smtpd.PureProxy(localaddr, remoteaddr)

   Create a new pure proxy server. Arguments are as per
   ``SMTPServer``. Everything will be relayed to *remoteaddr*.  Note
   that running this has a good chance to make you into an open relay,
   so please be careful.


MailmanProxy Objects
====================

class class smtpd.MailmanProxy(localaddr, remoteaddr)

   Create a new pure proxy server. Arguments are as per
   ``SMTPServer``. Everything will be relayed to *remoteaddr*, unless
   local mailman configurations knows about an address, in which case
   it will be handled via mailman.  Note that running this has a good
   chance to make you into an open relay, so please be careful.
