class smtpd.SMTPServer(localaddr, remoteaddr, data_size_limit=33554432, map=None, enable_SMTPUTF8=False, decode_data=True)
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.
data_size_limit specifies the maximum number of bytes that will be accepted in a DATA
command. A value of None
or 0
means no limit.
map is the socket map to use for connections (an initially empty dictionary is a suitable value). If not specified the asyncore
global socket map is used.
enable_SMTPUTF8 determins whether the SMTPUTF8
extension (as defined in RFC 6531) should be enabled. The default is False
. If set to True
, decode_data must be False
(otherwise an error is raised). When True
, SMTPUTF8
is accepted as a parameter to the MAIL
command and when present is passed to process_message()
in the kwargs['mail_options']
list.
decode_data specifies whether the data portion of the SMTP transaction should be decoded using UTF-8. The default is True
for backward compatibility reasons, but will change to False
in Python 3.6; specify the keyword value explicitly to avoid the DeprecationWarning
. When decode_data is set to False
the server advertises the 8BITMIME
extension (RFC 6152), accepts the BODY=8BITMIME
parameter to the MAIL
command, and when present passes it to process_message()
in the kwargs['mail_options']
list.
-
process_message(peer, mailfrom, rcpttos, data, **kwargs)
-
Raise a
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 5321 format).If the decode_data constructor keyword is set to
True
, the data argument will be a unicode string. If it is set toFalse
, it will be a bytes object.kwargs is a dictionary containing additional information. It is empty unless at least one of
decode_data=False
orenable_SMTPUTF8=True
was given as an init parameter, in which case it contains the following keys:- mail_options:
- a list of all received parameters to the
MAIL
command (the elements are uppercase strings; example:['BODY=8BITMIME', 'SMTPUTF8']
). - rcpt_options:
- same as mail_options but for the
RCPT
command. Currently noRCPT TO
options are supported, so for now this will always be an empty list.
Implementations of
process_message
should use the**kwargs
signature to accept arbitrary keyword arguments, since future feature enhancements may add keys to the kwargs dictionary.Return
None
to request a normal250 Ok
response; otherwise return the desired response string in RFC 5321 format.
-
channel_class
-
Override this in subclasses to use a custom
SMTPChannel
for managing SMTP clients.
New in version 3.4: The map constructor argument.
Changed in version 3.5: localaddr and remoteaddr may now contain IPv6 addresses.
New in version 3.5: the decode_data and enable_SMTPUTF8 constructor arguments, and the kwargs argument to process_message()
when one or more of these is specified.
Please login to continue.