Hi Eli!

Here's an idea:

It seems class smtplib.SMTP sends the message with method 'send', that calls a
socket's 'sendall' (from Python 2.4's smtplib.py)

    def send(self, str):
        """Send `str' to the server."""
        # .. skipping
                self.sock.sendall(str)
        # .. skipping

You could subclass smtplib.SMTP, and reimplement method 'send' using Socket.send
instead of Socket.sendall to send chunks, and do whatever you want then.

For example, you could call a callback with the bytes sent:

    def send(self, str, chunk_size=512, callback=lambda bytes_sent: None):
        """Send `str' to the server."""
        # .. skipping
                bytes_sent = 0
                while bytes_sent < len(str):
                    chunk = str[bytes_sent:bytes_sent+chunk_size]
                    bytes_sent += self.sock.send(chunk)
                    callback(bytes_sent)
        # .. skipping

I haven't tested it, but it seems about right.

Ori.

Eli Golovinsky wrote:
> I am sending large email messages (with MIME parts) using this recipe :
> 
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/473810
> 
> 
> But I can't find any way to monitor the progress (i.e. how many bytes
> have been delivered until now) of  the sending.
> 
> 
> Anybody has an idea how I can accomplish that?
> 
> 
> 
> 
  • smtplib Eli Golovinsky
    • Re: smtplib Ori Peleg

לענות