20.13. "smtpd" --- SMTP Server
******************************

**Source code:** Lib/smtpd.py

======================================================================

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.


20.13.1. SMTPServer Objects
===========================

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.  Both *localaddr* and *remoteaddr* should be a (host,
   port) tuple.  The object 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).


20.13.2. DebuggingServer Objects
================================

class smtpd.DebuggingServer(localaddr, remoteaddr)

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


20.13.3. PureProxy Objects
==========================

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.


20.13.4. MailmanProxy Objects
=============================

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.
