Il modulo imaplib
non fornisce un modo per impostare il timeout, ma è possibile impostare un timeout predefinito per le nuove connessioni socket tramite il socket.setdefaulttimeout
:
import socket
import imaplib
socket.setdefaulttimeout(10)
imap = imaplib.IMAP4('test.com', 666)
Oppure si può anche andare a override della classe imaplib.IMAP4
con qualche conoscenza da imaplib
source e documenti, che fornisce un migliore controllo:
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')
noti che dopo aver creato il collegamento dovremmo impostare il timeout presa ritorna None
ag et in modo bloccante per la successiva socket.makefile
chiamata, come indicato nella documentazione metodo:
... la presa sia in modalità bloccante (non può avere un timeout). ...
Si prega di rimuovere self.sock.settimeout (None), lascia il timeout non funziona e il blocco sempre. – haosdent