class smtpd.SMTPChannel(server, conn, addr, data_size_limit=33554432, map=None, enable_SMTPUTF8=False, decode_data=True)
Create a new SMTPChannel
object which manages the communication between the server and a single SMTP client.
conn and addr are as per the instance variables described below.
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.
enable_SMTPUTF8 determins whether the SMTPUTF8
extension (as defined in RFC 6531) should be enabled. The default is False
. A ValueError
is raised if both enable_SMTPUTF8 and decode_data are set to True
at the same time.
A dictionary can be specified in map to avoid using a global socket map.
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
.
To use a custom SMTPChannel implementation you need to override the SMTPServer.channel_class
of your SMTPServer
.
Changed in version 3.5: the decode_data and enable_SMTPUTF8 arguments were added.
The SMTPChannel
has the following instance variables:
-
smtp_server
-
Holds the
SMTPServer
that spawned this channel.
-
conn
-
Holds the socket object connecting to the client.
-
addr
-
Holds the address of the client, the second value returned by
socket.accept
-
received_lines
-
Holds a list of the line strings (decoded using UTF-8) received from the client. The lines have their
"\r\n"
line ending translated to"\n"
.
-
smtp_state
-
Holds the current state of the channel. This will be either
COMMAND
initially and thenDATA
after the client sends a “DATA” line.
-
seen_greeting
-
Holds a string containing the greeting sent by the client in its “HELO”.
-
mailfrom
-
Holds a string containing the address identified in the “MAIL FROM:” line from the client.
-
rcpttos
-
Holds a list of strings containing the addresses identified in the “RCPT TO:” lines from the client.
-
received_data
-
Holds a string containing all of the data sent by the client during the DATA state, up to but not including the terminating
"\r\n.\r\n"
.
-
fqdn
-
Holds the fully-qualified domain name of the server as returned by
socket.getfqdn()
.
-
peer
-
Holds the name of the client peer as returned by
conn.getpeername()
whereconn
isconn
.
The SMTPChannel
operates by invoking methods named smtp_<command>
upon reception of a command line from the client. Built into the base SMTPChannel
class are methods for handling the following commands (and responding to them appropriately):
Command | Action taken |
---|---|
HELO | Accepts the greeting from the client and stores it in seen_greeting . Sets server to base command mode. |
EHLO | Accepts the greeting from the client and stores it in seen_greeting . Sets server to extended command mode. |
NOOP | Takes no action. |
QUIT | Closes the connection cleanly. |
Accepts the “MAIL FROM:” syntax and stores the supplied address as mailfrom . In extended command mode, accepts the RFC 1870 SIZE attribute and responds appropriately based on the value of data_size_limit. | |
RCPT | Accepts the “RCPT TO:” syntax and stores the supplied addresses in the rcpttos list. |
RSET | Resets the mailfrom , rcpttos , and received_data , but not the greeting. |
DATA | Sets the internal state to DATA and stores remaining lines from the client in received_data until the terminator "\r\n.\r\n" is received. |
HELP | Returns minimal information on command syntax |
VRFY | Returns code 252 (the server doesn’t know if the address is valid) |
EXPN | Reports that the command is not implemented. |
Please login to continue.