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
NotImplementedErrorexception. Override this in subclasses to do something useful with this message. Whatever was passed in the constructor as remoteaddr will be available as the_remoteaddrattribute. 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=Falseorenable_SMTPUTF8=Truewas given as an init parameter, in which case it contains the following keys:- mail_options:
- a list of all received parameters to the
MAILcommand (the elements are uppercase strings; example:['BODY=8BITMIME', 'SMTPUTF8']). - rcpt_options:
- same as mail_options but for the
RCPTcommand. Currently noRCPT TOoptions are supported, so for now this will always be an empty list.
Implementations of
process_messageshould use the**kwargssignature to accept arbitrary keyword arguments, since future feature enhancements may add keys to the kwargs dictionary.Return
Noneto request a normal250 Okresponse; otherwise return the desired response string in RFC 5321 format.
-
channel_class -
Override this in subclasses to use a custom
SMTPChannelfor 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.