Module imaplib
không cung cấp một cách để thiết lập thời gian chờ, nhưng bạn có thể thiết lập một thời gian chờ mặc định cho các kết nối socket mới qua socket.setdefaulttimeout
:
import socket
import imaplib
socket.setdefaulttimeout(10)
imap = imaplib.IMAP4('test.com', 666)
Hoặc bạn cũng có thể đi về trọng lớp imaplib.IMAP4
với một số kiến thức từ imaplib
source và tài liệu, cung cấp kiểm soát tốt hơn:
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')
Lưu ý rằng sau khi tạo kết nối chúng ta nên thiết lập thời gian chờ ổ cắm trở lại None
để g et nó sang chế độ chặn cho sau này socket.makefile
cuộc gọi, như đã nêu trong các tài liệu phương pháp:
... Các ổ cắm phải ở chế độ chặn (nó không thể có một thời gian chờ). ...
Vui lòng xóa self.sock.settimeout (Không), để thời gian chờ không hoạt động và luôn chặn. – haosdent