Back to index

python3.2  3.2.2
Public Member Functions | Public Attributes | Static Public Attributes | Private Attributes
smtpd.SMTPServer Class Reference
Inheritance diagram for smtpd.SMTPServer:
Inheritance graph
[legend]
Collaboration diagram for smtpd.SMTPServer:
Collaboration graph
[legend]

List of all members.

Public Member Functions

def __init__
def handle_accepted
def process_message
def __repr__
def add_channel
def del_channel
def create_socket
def set_socket

Public Attributes

 socket
 family_and_type

Static Public Attributes

 channel_class = SMTPChannel
 debug = False
 connected = False
 accepting = False
 closing = False
 addr = None
tuple ignore_log_types = frozenset(['warning'])

Private Attributes

 _localaddr
 _remoteaddr

Detailed Description

Definition at line 426 of file smtpd.py.


Constructor & Destructor Documentation

def smtpd.SMTPServer.__init__ (   self,
  localaddr,
  remoteaddr 
)

Reimplemented from asyncore.dispatcher.

Reimplemented in test.test_smtplib.SimSMTPServer, and test.test_smtpd.DummyServer.

Definition at line 430 of file smtpd.py.

00430 
00431     def __init__(self, localaddr, remoteaddr):
00432         self._localaddr = localaddr
00433         self._remoteaddr = remoteaddr
00434         asyncore.dispatcher.__init__(self)
00435         try:
00436             self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
00437             # try to re-use a server port if possible
00438             self.set_reuse_addr()
00439             self.bind(localaddr)
00440             self.listen(5)
00441         except:
00442             self.close()
00443             raise
00444         else:
00445             print('%s started at %s\n\tLocal addr: %s\n\tRemote addr:%s' % (
00446                 self.__class__.__name__, time.ctime(time.time()),
00447                 localaddr, remoteaddr), file=DEBUGSTREAM)

Here is the caller graph for this function:


Member Function Documentation

def asyncore.dispatcher.__repr__ (   self) [inherited]

Definition at line 264 of file asyncore.py.

00264 
00265     def __repr__(self):
00266         status = [self.__class__.__module__+"."+self.__class__.__name__]
00267         if self.accepting and self.addr:
00268             status.append('listening')
00269         elif self.connected:
00270             status.append('connected')
00271         if self.addr is not None:
00272             try:
00273                 status.append('%s:%d' % self.addr)
00274             except TypeError:
00275                 status.append(repr(self.addr))
00276         return '<%s at %#x>' % (' '.join(status), id(self))

def asyncore.dispatcher.add_channel (   self,
  map = None 
) [inherited]

Definition at line 279 of file asyncore.py.

00279 
00280     def add_channel(self, map=None):
00281         #self.log_info('adding channel %s' % self)
00282         if map is None:
00283             map = self._map
00284         map[self._fileno] = self

Here is the caller graph for this function:

def asyncore.dispatcher.create_socket (   self,
  family,
  type 
) [inherited]

Definition at line 294 of file asyncore.py.

00294 
00295     def create_socket(self, family, type):
00296         self.family_and_type = family, type
00297         sock = socket.socket(family, type)
00298         sock.setblocking(0)
00299         self.set_socket(sock)

Here is the caller graph for this function:

def asyncore.dispatcher.del_channel (   self,
  map = None 
) [inherited]

Definition at line 285 of file asyncore.py.

00285 
00286     def del_channel(self, map=None):
00287         fd = self._fileno
00288         if map is None:
00289             map = self._map
00290         if fd in map:
00291             #self.log_info('closing channel %d:%s' % (fd, self))
00292             del map[fd]
00293         self._fileno = None

Here is the caller graph for this function:

def smtpd.SMTPServer.handle_accepted (   self,
  conn,
  addr 
)

Reimplemented in test.test_smtplib.SimSMTPServer.

Definition at line 448 of file smtpd.py.

00448 
00449     def handle_accepted(self, conn, addr):
00450         print('Incoming connection from %s' % repr(addr), file=DEBUGSTREAM)
00451         channel = self.channel_class(self, conn, addr)

def smtpd.SMTPServer.process_message (   self,
  peer,
  mailfrom,
  rcpttos,
  data 
)
Override this abstract method to handle messages from the client.

peer is a tuple containing (ipaddr, port) of the client that made the
socket connection to our smtp port.

mailfrom is the raw address the client claims the message is coming
from.

rcpttos is a list of raw addresses the client wishes to deliver the
message to.

data is a string containing the entire full text of the message,
headers (if supplied) and all.  It has been `de-transparencied'
according to RFC 821, Section 4.5.2.  In other words, a line
containing a `.' followed by other text has had the leading dot
removed.

This function should return None, for a normal `250 Ok' response;
otherwise it returns the desired response string in RFC 821 format.

Reimplemented in test.test_smtplib.SimSMTPServer, smtpd.MailmanProxy, smtpd.PureProxy, smtpd.DebuggingServer, and test.test_smtpd.DummyServer.

Definition at line 453 of file smtpd.py.

00453 
00454     def process_message(self, peer, mailfrom, rcpttos, data):
00455         """Override this abstract method to handle messages from the client.
00456 
00457         peer is a tuple containing (ipaddr, port) of the client that made the
00458         socket connection to our smtp port.
00459 
00460         mailfrom is the raw address the client claims the message is coming
00461         from.
00462 
00463         rcpttos is a list of raw addresses the client wishes to deliver the
00464         message to.
00465 
00466         data is a string containing the entire full text of the message,
00467         headers (if supplied) and all.  It has been `de-transparencied'
00468         according to RFC 821, Section 4.5.2.  In other words, a line
00469         containing a `.' followed by other text has had the leading dot
00470         removed.
00471 
00472         This function should return None, for a normal `250 Ok' response;
00473         otherwise it returns the desired response string in RFC 821 format.
00474 
00475         """
00476         raise NotImplementedError
00477 
00478 

def asyncore.dispatcher.set_socket (   self,
  sock,
  map = None 
) [inherited]

Definition at line 300 of file asyncore.py.

00300 
00301     def set_socket(self, sock, map=None):
        self.socket = sock

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Definition at line 431 of file smtpd.py.

Definition at line 432 of file smtpd.py.

asyncore.dispatcher.accepting = False [static, inherited]

Definition at line 227 of file asyncore.py.

asyncore.dispatcher.addr = None [static, inherited]

Reimplemented in smtpd.SMTPChannel.

Definition at line 229 of file asyncore.py.

Definition at line 428 of file smtpd.py.

asyncore.dispatcher.closing = False [static, inherited]

Definition at line 228 of file asyncore.py.

asyncore.dispatcher.connected = False [static, inherited]

Reimplemented in asyncore.file_dispatcher.

Definition at line 226 of file asyncore.py.

asyncore.dispatcher.debug = False [static, inherited]

Definition at line 225 of file asyncore.py.

Definition at line 295 of file asyncore.py.

tuple asyncore.dispatcher.ignore_log_types = frozenset(['warning']) [static, inherited]

Definition at line 230 of file asyncore.py.


The documentation for this class was generated from the following file: