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