Back to index

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

List of all members.

Public Member Functions

def process_message
def handle_accepted
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 Member Functions

def _deliver

Detailed Description

Definition at line 495 of file smtpd.py.


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 smtpd.PureProxy._deliver (   self,
  mailfrom,
  rcpttos,
  data 
) [private]

Definition at line 510 of file smtpd.py.

00510 
00511     def _deliver(self, mailfrom, rcpttos, data):
00512         import smtplib
00513         refused = {}
00514         try:
00515             s = smtplib.SMTP()
00516             s.connect(self._remoteaddr[0], self._remoteaddr[1])
00517             try:
00518                 refused = s.sendmail(mailfrom, rcpttos, data)
00519             finally:
00520                 s.quit()
00521         except smtplib.SMTPRecipientsRefused as e:
00522             print('got SMTPRecipientsRefused', file=DEBUGSTREAM)
00523             refused = e.recipients
00524         except (socket.error, smtplib.SMTPException) as e:
00525             print('got', e.__class__, file=DEBUGSTREAM)
00526             # All recipients were refused.  If the exception had an associated
00527             # error code, use it.  Otherwise,fake it with a non-triggering
00528             # exception code.
00529             errcode = getattr(e, 'smtp_code', -1)
00530             errmsg = getattr(e, 'smtp_error', 'ignore')
00531             for r in rcpttos:
00532                 refused[r] = (errcode, errmsg)
00533         return refused
00534 
00535 


Here is the call graph for this function:

Here is the caller graph for this function:

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 
) [inherited]

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.PureProxy.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 from smtpd.SMTPServer.

Reimplemented in smtpd.MailmanProxy.

Definition at line 496 of file smtpd.py.

00496 
00497     def process_message(self, peer, mailfrom, rcpttos, data):
00498         lines = data.split('\n')
00499         # Look for the last header
00500         i = 0
00501         for line in lines:
00502             if not line:
00503                 break
00504             i += 1
00505         lines.insert(i, 'X-Peer: %s' % peer[0])
00506         data = NEWLINE.join(lines)
00507         refused = self._deliver(mailfrom, rcpttos, data)
00508         # TBD: what to do with refused addresses?
00509         print('we got some refusals:', refused, file=DEBUGSTREAM)

Here is the call graph for this function:

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

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: