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.