1:mod:`smtpd` --- SMTP Server
2============================
3
4.. module:: smtpd
5   :synopsis: A SMTP server implementation in Python.
6
7.. moduleauthor:: Barry Warsaw <barry@zope.com>
8.. sectionauthor:: Moshe Zadka <moshez@moshez.org>
9
10**Source code:** :source:`Lib/smtpd.py`
11
12--------------
13
14This module offers several classes to implement SMTP servers.  One is a generic
15do-nothing implementation, which can be overridden, while the other two offer
16specific mail-sending strategies.
17
18
19SMTPServer Objects
20------------------
21
22
23.. class:: SMTPServer(localaddr, remoteaddr)
24
25   Create a new :class:`SMTPServer` object, which binds to local address
26   *localaddr*.  It will treat *remoteaddr* as an upstream SMTP relayer.  Both
27   *localaddr* and *remoteaddr* should be a :ref:`(host, port) <host_port>`
28   tuple.  The object inherits from :class:`asyncore.dispatcher`, and so will
29   insert itself into :mod:`asyncore`'s event loop on instantiation.
30
31
32   .. method:: process_message(peer, mailfrom, rcpttos, data)
33
34      Raise :exc:`NotImplementedError` exception. Override this in subclasses to
35      do something useful with this message. Whatever was passed in the
36      constructor as *remoteaddr* will be available as the :attr:`_remoteaddr`
37      attribute. *peer* is the remote host's address, *mailfrom* is the envelope
38      originator, *rcpttos* are the envelope recipients and *data* is a string
39      containing the contents of the e-mail (which should be in :rfc:`2822`
40      format).
41
42
43DebuggingServer Objects
44-----------------------
45
46
47.. class:: DebuggingServer(localaddr, remoteaddr)
48
49   Create a new debugging server.  Arguments are as per :class:`SMTPServer`.
50   Messages will be discarded, and printed on stdout.
51
52
53PureProxy Objects
54-----------------
55
56
57.. class:: PureProxy(localaddr, remoteaddr)
58
59   Create a new pure proxy server. Arguments are as per :class:`SMTPServer`.
60   Everything will be relayed to *remoteaddr*.  Note that running this has a good
61   chance to make you into an open relay, so please be careful.
62
63
64MailmanProxy Objects
65--------------------
66
67
68.. class:: MailmanProxy(localaddr, remoteaddr)
69
70   Create a new pure proxy server. Arguments are as per :class:`SMTPServer`.
71   Everything will be relayed to *remoteaddr*, unless local mailman configurations
72   knows about an address, in which case it will be handled via mailman.  Note that
73   running this has a good chance to make you into an open relay, so please be
74   careful.
75
76