2014-06-26 15 views

Antwort

12

Das imaplib Modul bietet keine Möglichkeit Timeout einstellen, aber Sie können eine Standard-Timeout für neue Socket-Verbindungen eingestellt über die socket.setdefaulttimeout: mit über das Überschreiben der imaplib.IMAP4 Klasse auch gehen

import socket 
import imaplib 
socket.setdefaulttimeout(10) 
imap = imaplib.IMAP4('test.com', 666) 

Oder Sie können einige Kenntnisse aus imaplib source und Dokumente, die eine bessere Kontrolle bietet:

import imaplib 
import socket 

class IMAP(imaplib.IMAP4): 
    def __init__(self, host='', port=imaplib.IMAP4_PORT, timeout=None): 
     self.timeout = timeout 
     # no super(), it's an old-style class 
     imaplib.IMAP4.__init__(self, host, port) 

    def open(self, host='', port=imaplib.IMAP4_PORT): 
     self.host = host 
     self.port = port 
     self.sock = socket.create_connection((host, port), timeout=self.timeout) 
     # clear timeout for socket.makefile, needs blocking mode 
     self.sock.settimeout(None) 
     self.file = self.sock.makefile('rb') 

Hinweis, dass die Verbindung nach dem Erstellen wir den Socket-Timeout zurück zu None bis g eingestellt sollte et es Modus für nachfolgenden socket.makefile Aufruf zu blockieren, wie es in dem Verfahren docs angegeben:

... Die Steckdose muss in blockierenden Modus (es kann kein Timeout hat). ...

+0

Bitte entfernen Sie self.sock.settimeout (None), es Timeout nicht funktioniert und blockiert immer. – haosdent