imaplib --- ứng dụng khách giao thức IMAP4

Source code: Lib/imaplib.py


Mô-đun này xác định ba lớp, IMAP4, IMAP4_SSLIMAP4_stream, đóng gói kết nối đến máy chủ IMAP4 và triển khai một tập hợp con lớn của giao thức máy khách IMAP4rev1 như được xác định trong RFC 2060. Nó tương thích ngược với máy chủ IMAP4 (RFC 1730), nhưng lưu ý rằng lệnh STATUS không được hỗ trợ trong IMAP4.

sẵn có: not WASI.

Mô-đun này không hoạt động hoặc không có trên WebAssembly. Xem Nền tảng WebAssugging để biết thêm thông tin.

Ba lớp được cung cấp bởi mô-đun imaplib, IMAP4 là lớp cơ sở:

class imaplib.IMAP4(host='', port=IMAP4_PORT, timeout=None)

Lớp này thực hiện giao thức IMAP4 thực tế. Kết nối được tạo và phiên bản giao thức (IMAP4 hoặc IMAP4rev1) được xác định khi phiên bản được khởi tạo. Nếu host không được chỉ định, '' (máy chủ cục bộ) sẽ được sử dụng. Nếu port bị bỏ qua, cổng IMAP4 tiêu chuẩn (143) sẽ được sử dụng. Tham số timeout tùy chọn chỉ định thời gian chờ tính bằng giây cho lần thử kết nối. Nếu thời gian chờ không được cung cấp hoặc là None, thì thời gian chờ ổ cắm mặc định chung sẽ được sử dụng.

Lớp IMAP4 hỗ trợ câu lệnh with. Khi được sử dụng như thế này, lệnh IMAP4 LOGOUT sẽ tự động được đưa ra khi câu lệnh with thoát. Ví dụ:

>>> từ nhập imaplib IMAP4
>>> với IMAP4("domain.org")  M:
... M.noop()
...
('OK', [b'Không có gì hoàn thành. d25if65hy903weo.87'])

Thay đổi trong phiên bản 3.5: Hỗ trợ cho câu lệnh with đã được thêm vào.

Thay đổi trong phiên bản 3.9: Tham số timeout tùy chọn đã được thêm vào.

Ba trường hợp ngoại lệ được định nghĩa là thuộc tính của lớp IMAP4:

exception IMAP4.error

Ngoại lệ được đưa ra đối với bất kỳ lỗi nào. Lý do ngoại lệ được chuyển tới hàm tạo dưới dạng một chuỗi.

exception IMAP4.abort

Lỗi máy chủ IMAP4 khiến ngoại lệ này xuất hiện. Đây là một lớp con của IMAP4.error. Lưu ý rằng việc đóng phiên bản và khởi tạo một phiên bản mới thường sẽ cho phép khôi phục từ ngoại lệ này.

exception IMAP4.readonly

Ngoại lệ này được đưa ra khi hộp thư có thể ghi có trạng thái được máy chủ thay đổi. Đây là một lớp con của IMAP4.error. Một số ứng dụng khách khác hiện có quyền ghi và hộp thư sẽ cần được mở lại để lấy lại quyền ghi.

Ngoài ra còn có một lớp con dành cho các kết nối an toàn:

class imaplib.IMAP4_SSL(host='', port=IMAP4_SSL_PORT, *, ssl_context=None, timeout=None)

Đây là một lớp con bắt nguồn từ IMAP4 kết nối qua ổ cắm được mã hóa SSL (để sử dụng lớp này, bạn cần có mô-đun ổ cắm được biên dịch có hỗ trợ SSL). Nếu host không được chỉ định, '' (máy chủ cục bộ) sẽ được sử dụng. Nếu port bị bỏ qua, cổng IMAP4-over-SSL tiêu chuẩn (993) sẽ được sử dụng. ssl_context là một đối tượng ssl.SSLContext cho phép gộp các tùy chọn cấu hình, chứng chỉ và khóa riêng của SSL vào một cấu trúc duy nhất (có khả năng tồn tại lâu dài). Vui lòng đọc Cân nhắc về bảo mật để biết cách thực hành tốt nhất.

Tham số timeout tùy chọn chỉ định thời gian chờ tính bằng giây cho lần thử kết nối. Nếu thời gian chờ không được cung cấp hoặc là None, thì thời gian chờ ổ cắm mặc định chung sẽ được sử dụng.

Thay đổi trong phiên bản 3.3: tham số ssl_context đã được thêm vào.

Thay đổi trong phiên bản 3.4: Lớp hiện hỗ trợ kiểm tra tên máy chủ bằng ssl.SSLContext.check_hostnameServer Name Indication (xem ssl.HAS_SNI).

Thay đổi trong phiên bản 3.9: Tham số timeout tùy chọn đã được thêm vào.

Thay đổi trong phiên bản 3.12: Các tham số keyfilecertfile không được dùng nữa đã bị xóa.

Lớp con thứ hai cho phép các kết nối được tạo bởi một tiến trình con:

class imaplib.IMAP4_stream(command)

Đây là một lớp con bắt nguồn từ IMAP4, kết nối với bộ mô tả tệp stdin/stdout được tạo bằng cách chuyển command đến subprocess.Popen().

Các chức năng tiện ích sau đây được xác định:

imaplib.Internaldate2tuple(datestr)

Phân tích chuỗi IMAP4 INTERNALDATE và trả về giờ địa phương tương ứng. Giá trị trả về là bộ time.struct_time hoặc None nếu chuỗi có định dạng sai.

imaplib.Int2AP(num)

Chuyển đổi một số nguyên thành biểu diễn byte bằng cách sử dụng các ký tự từ tập hợp [A .. P].

imaplib.ParseFlags(flagstr)

Chuyển đổi phản hồi IMAP4 FLAGS thành một bộ cờ riêng lẻ.

imaplib.Time2Internaldate(date_time)

Chuyển đổi date_time thành biểu diễn IMAP4 INTERNALDATE. Giá trị trả về là một chuỗi có dạng: "DD-Mmm-YYYY HH:MM:SS +HHMM" (bao gồm cả dấu ngoặc kép). Đối số date_time có thể là một số (int hoặc float) biểu thị số giây kể từ kỷ nguyên (được trả về bởi time.time()), một bộ 9 biểu thị giờ địa phương, một phiên bản của time.struct_time (được trả về bởi time.localtime()), một phiên bản nhận biết của datetime.datetime hoặc một chuỗi trích dẫn kép. Trong trường hợp cuối cùng, nó được coi là đã ở đúng định dạng.

Lưu ý rằng số tin nhắn IMAP4 thay đổi khi hộp thư thay đổi; đặc biệt, sau khi lệnh EXPUNGE thực hiện xóa, các tin nhắn còn lại sẽ được đánh số lại. Vì vậy, chúng tôi khuyên bạn nên sử dụng UID thay thế bằng lệnh UID.

Ở cuối mô-đun, có phần kiểm tra chứa ví dụ sử dụng rộng rãi hơn.

Xem thêm

Các tài liệu mô tả giao thức, nguồn cho các máy chủ triển khai nó, do Trung tâm Thông tin IMAP của Đại học Washington cung cấp đều có thể tìm thấy tại (Source Code) https://github.com/uw-imap/imap (Not Maintained).

Đối tượng IMAP4

Tất cả các lệnh IMAP4rev1 được thể hiện bằng các phương thức có cùng tên, chữ hoa hoặc chữ thường.

Tất cả các đối số cho lệnh đều được chuyển đổi thành chuỗi, ngoại trừ AUTHENTICATE và đối số cuối cùng thành APPEND được truyền dưới dạng chữ IMAP4. Nếu cần (chuỗi chứa các ký tự nhạy cảm với giao thức IMAP4 và không được đặt trong dấu ngoặc đơn hoặc dấu ngoặc kép), mỗi chuỗi sẽ được trích dẫn. Tuy nhiên, đối số password cho lệnh LOGIN luôn được trích dẫn. Nếu bạn muốn tránh có một chuỗi đối số được trích dẫn (ví dụ: đối số flags thành STORE) thì hãy đặt chuỗi đó trong dấu ngoặc đơn (ví dụ: r'(\Deleted)').

Hầu hết các lệnh đều trả về một bộ dữ liệu: (type, [data, ...]) trong đó type thường là 'OK' hoặc 'NO'data là văn bản từ phản hồi lệnh hoặc kết quả bắt buộc từ lệnh. Mỗi databytes hoặc một bộ dữ liệu. Nếu là một bộ, thì phần đầu tiên là tiêu đề của phản hồi và phần thứ hai chứa dữ liệu (tức là: giá trị 'bằng chữ').

Các tùy chọn message_set cho các lệnh bên dưới là một chuỗi chỉ định một hoặc nhiều thông báo sẽ được thực hiện. Nó có thể là một số tin nhắn đơn giản ('1'), một dãy số tin nhắn ('2:4') hoặc một nhóm các phạm vi không liền kề được phân tách bằng dấu phẩy ('1:3,6:9'). Một phạm vi có thể chứa dấu hoa thị để biểu thị giới hạn trên vô hạn ('3:*').

Một phiên bản IMAP4 có các phương thức sau:

IMAP4.append(mailbox, flags, date_time, message)

Nối message vào hộp thư được đặt tên.

IMAP4.authenticate(mechanism, authobject)

Lệnh xác thực --- yêu cầu xử lý phản hồi.

mechanism chỉ định cơ chế xác thực nào sẽ được sử dụng - nó sẽ xuất hiện trong biến thể hiện capabilities ở dạng AUTH=mechanism.

authobject phải là một đối tượng có thể gọi được:

dữ liệu = authobject(phản hồi)

Nó sẽ được gọi để xử lý các phản hồi tiếp tục của máy chủ; đối số response được truyền sẽ là bytes. Nó sẽ trả về bytes data sẽ được mã hóa base64 và gửi đến máy chủ. Nó sẽ trả về None nếu thay vào đó, khách hàng hủy bỏ phản hồi *.

Thay đổi trong phiên bản 3.5: tên người dùng và mật khẩu chuỗi hiện được mã hóa thành utf-8 thay vì bị giới hạn ở ASCII.

IMAP4.check()

Hộp thư điểm kiểm tra trên máy chủ.

IMAP4.close()

Đóng hộp thư hiện được chọn. Thư đã xóa sẽ bị xóa khỏi hộp thư có thể ghi. Đây là lệnh được khuyến nghị trước LOGOUT.

IMAP4.copy(message_set, new_mailbox)

Sao chép tin nhắn message_set vào cuối new_mailbox.

IMAP4.create(mailbox)

Tạo hộp thư mới có tên mailbox.

IMAP4.delete(mailbox)

Xóa hộp thư cũ có tên mailbox.

IMAP4.deleteacl(mailbox, who)

Xóa ACL (xóa mọi quyền) được đặt cho ai trên hộp thư.

IMAP4.enable(capability)

Kích hoạt capability (xem RFC 5161). Hầu hết các khả năng không cần phải được kích hoạt. Hiện tại chỉ hỗ trợ khả năng UTF8=ACCEPT (xem RFC 6855).

Added in version 3.5: Bản thân phương thức enable() và hỗ trợ RFC 6855.

IMAP4.expunge()

Xóa vĩnh viễn các mục đã xóa khỏi hộp thư đã chọn. Tạo phản hồi EXPUNGE cho mỗi tin nhắn đã xóa. Dữ liệu trả về chứa danh sách các số tin nhắn EXPUNGE theo thứ tự nhận được.

IMAP4.fetch(message_set, message_parts)

Tìm nạp (các phần của) tin nhắn. message_parts phải là một chuỗi tên phần thông báo được đặt trong dấu ngoặc đơn, ví dụ: "(UID BODY[TEXT])". Dữ liệu trả về là các bộ dữ liệu và phong bì phần thông điệp.

IMAP4.getacl(mailbox)

Nhận ACLs cho mailbox. Phương pháp này không chuẩn nhưng được máy chủ Cyrus hỗ trợ.

IMAP4.getannotation(mailbox, entry, attribute)

Truy xuất ANNOTATIONs được chỉ định cho mailbox. Phương pháp này không chuẩn nhưng được máy chủ Cyrus hỗ trợ.

IMAP4.getquota(root)

Nhận giới hạn và mức sử dụng tài nguyên của quota root. Phương thức này là một phần của phần mở rộng IMAP4 QUOTA được xác định trong rfc2087.

IMAP4.getquotaroot(mailbox)

Lấy danh sách quota roots cho mailbox có tên. Phương thức này là một phần của phần mở rộng IMAP4 QUOTA được xác định trong rfc2087.

IMAP4.idle(duration=None)

Trả về Idler: trình quản lý bối cảnh có thể lặp lại triển khai lệnh IMAP4 IDLE như được định nghĩa trong RFC 2177.

Đối tượng được trả về sẽ gửi lệnh IDLE khi được kích hoạt bằng câu lệnh with, tạo ra các phản hồi không được gắn thẻ IMAP thông qua giao thức iterator và gửi DONE khi thoát khỏi ngữ cảnh.

Tất cả các phản hồi không được gắn thẻ đến sau khi gửi lệnh IDLE (bao gồm mọi phản hồi đến trước khi máy chủ xác nhận lệnh) sẽ có sẵn thông qua việc lặp lại. Mọi phản hồi còn sót lại (những phản hồi không được lặp lại trong ngữ cảnh with) có thể được truy xuất theo cách thông thường sau khi IDLE kết thúc, sử dụng IMAP4.response().

Các phản hồi được biểu diễn dưới dạng bộ dữ liệu (type, [data, ...]), như được mô tả trong IMAP4 Objects.

Đối số duration đặt thời lượng tối đa (tính bằng giây) để tiếp tục chạy không tải, sau đó mọi hoạt động lặp lại đang diễn ra sẽ dừng lại. Nó có thể là int hoặc float hoặc None không giới hạn thời gian. Người gọi muốn tránh thời gian chờ không hoạt động trên các máy chủ áp đặt chúng nên giữ thời gian này tối đa là 29 phút (1740 giây). Yêu cầu kết nối ổ cắm; duration phải là None trên các kết nối IMAP4_stream.

>>> với M.idle(duration=29 * 60)  người chạy không tải:
... đối với typ, dữ liệu trong Idler:
... in(kiểu chữ, dữ liệu)
...
EXISTS [b'1']
RECENT [b'1']
Idler.burst(interval=0.1)

Đưa ra một loạt phản hồi cách nhau không quá interval giây (được biểu thị dưới dạng int hoặc float).

Zz000zz này là một giải pháp thay thế cho việc lặp lại một phản hồi tại một thời điểm, nhằm hỗ trợ xử lý hàng loạt hiệu quả. Nó truy xuất phản hồi tiếp theo cùng với mọi phản hồi tiếp theo có sẵn ngay lập tức. (Ví dụ: một loạt phản hồi EXPUNGE nhanh chóng sau khi xóa hàng loạt.)

Yêu cầu kết nối ổ cắm; không hoạt động trên các kết nối IMAP4_stream.

>>> với M.idle()  người chạy không tải:
... # get một phản hồi và bất kỳ phản hồi nào khác theo sau < 0,1 giây
... đợt = danh sách(idler.burst())
... print(f'processing {len(batch)} phản hồi...')
... in(đợt)
...
đang xử lý 3 phản hồi...
[('EXPUNGE', [b'2']), ('EXPUNGE', [b'1']), ('RECENT', [b'0'])]

Mẹo

Thời lượng tối đa của ngữ cảnh IDLE, như được chuyển tới IMAP4.idle(), được tôn trọng khi chờ phản hồi đầu tiên trong một loạt. Do đó, một Idler hết hạn sẽ khiến trình tạo này quay trở lại ngay lập tức mà không tạo ra bất cứ thứ gì. Người gọi nên cân nhắc điều này nếu sử dụng nó trong một vòng lặp.

Ghi chú

Trình lặp được trả về bởi IMAP4.idle() chỉ có thể sử dụng được trong câu lệnh with. Trước hoặc sau ngữ cảnh đó, các phản hồi không được yêu cầu sẽ được thu thập nội bộ bất cứ khi nào lệnh kết thúc và có thể được truy xuất bằng IMAP4.response().

Ghi chú

Tên và cấu trúc lớp Idler là giao diện nội bộ, có thể thay đổi. Mã gọi có thể dựa vào việc quản lý ngữ cảnh, phép lặp và phương thức công khai để duy trì sự ổn định, nhưng không nên phân lớp, khởi tạo, so sánh hoặc tham chiếu trực tiếp đến lớp.

Added in version 3.14.

IMAP4.list([directory[, pattern]])

Liệt kê tên hộp thư trong directory khớp với pattern. directory mặc định là thư mục thư cấp cao nhất và pattern mặc định khớp với mọi thứ. Dữ liệu trả về chứa danh sách phản hồi LIST.

IMAP4.login(user, password)

Xác định khách hàng bằng mật khẩu văn bản gốc. Zz000zz sẽ được trích dẫn.

IMAP4.login_cram_md5(user, password)

Buộc sử dụng xác thực CRAM-MD5 khi xác định ứng dụng khách để bảo vệ mật khẩu. Sẽ chỉ hoạt động nếu phản hồi CAPABILITY của máy chủ bao gồm cụm từ AUTH=CRAM-MD5.

Thay đổi trong phiên bản 3.14: Một IMAP4.error được nâng lên nếu không có hỗ trợ MD5.

IMAP4.logout()

Tắt kết nối với máy chủ. Trả về phản hồi BYE của máy chủ.

Thay đổi trong phiên bản 3.8: Phương pháp này không còn bỏ qua các ngoại lệ tùy ý một cách âm thầm nữa.

IMAP4.lsub(directory='""', pattern='*')

Liệt kê tên hộp thư đã đăng ký theo mẫu khớp thư mục. directory mặc định là thư mục cấp cao nhất và pattern mặc định khớp với bất kỳ hộp thư nào. Dữ liệu trả về là các bộ dữ liệu và phong bì phần thông điệp.

IMAP4.myrights(mailbox)

Hiển thị ACL của tôi cho hộp thư (tức là các quyền mà tôi có đối với hộp thư).

IMAP4.namespace()

Trả về các không gian tên IMAP như được định nghĩa trong RFC 2342.

IMAP4.noop()

Gửi NOOP đến máy chủ.

IMAP4.open(host, port, timeout=None)

Mở ổ cắm tới port tại host. Tham số timeout tùy chọn chỉ định thời gian chờ tính bằng giây cho lần thử kết nối. Nếu thời gian chờ không được cung cấp hoặc là None, thì thời gian chờ ổ cắm mặc định chung sẽ được sử dụng. Cũng lưu ý rằng nếu tham số timeout được đặt thành 0, nó sẽ tăng ValueError để từ chối việc tạo ổ cắm không chặn. Phương thức này được gọi ngầm bởi hàm tạo IMAP4. Các đối tượng kết nối được thiết lập bằng phương pháp này sẽ được sử dụng trong các phương thức IMAP4.read(), IMAP4.readline(), IMAP4.send()IMAP4.shutdown(). Bạn có thể ghi đè phương pháp này.

Tăng một auditing event imaplib.open với các đối số self, host, port.

Thay đổi trong phiên bản 3.9: Tham số timeout đã được thêm vào.

IMAP4.partial(message_num, message_part, start, length)

Tìm nạp phần bị cắt bớt của tin nhắn. Dữ liệu trả về là một bộ dữ liệu và phong bì phần thông báo.

IMAP4.proxyauth(user)

Giả sử xác thực là user. Cho phép quản trị viên được ủy quyền ủy quyền vào hộp thư của bất kỳ người dùng nào.

IMAP4.read(size)

Đọc byte size từ máy chủ từ xa. Bạn có thể ghi đè phương pháp này.

IMAP4.readline()

Đọc một dòng từ máy chủ từ xa. Bạn có thể ghi đè phương pháp này.

IMAP4.recent()

Máy chủ nhắc nhở để cập nhật. Dữ liệu trả về là None nếu không có tin nhắn mới, giá trị khác của phản hồi RECENT.

IMAP4.rename(oldmailbox, newmailbox)

Đổi tên hộp thư có tên oldmailbox thành newmailbox.

IMAP4.response(code)

Trả về dữ liệu cho phản hồi code nếu nhận được hoặc None. Trả về mã đã cho, thay vì loại thông thường.

IMAP4.search(charset, criterion[, ...])

Tìm kiếm hộp thư để tìm các thư phù hợp. charset có thể là None, trong trường hợp đó sẽ không có CHARSET nào được chỉ định trong yêu cầu tới máy chủ. Giao thức IMAP yêu cầu phải chỉ định ít nhất một tiêu chí; một ngoại lệ sẽ được đưa ra khi máy chủ trả về lỗi. charset phải là None nếu khả năng UTF8=ACCEPT được bật bằng lệnh enable().

Ví dụ:

# M là một phiên bản IMAP4 được kết nối...
typ, msgnums = M.search(Không , 'FROM', '"LDJ"')

# or:
typ, msgnums = M.search(Không , '(FROM "LDJ")')
IMAP4.select(mailbox='INBOX', readonly=False)

Chọn một hộp thư. Dữ liệu trả về là số lượng tin nhắn trong mailbox (phản hồi EXISTS). Zz003zz mặc định là 'INBOX'. Nếu cờ readonly được đặt thì không được phép sửa đổi hộp thư.

IMAP4.send(data)

Gửi data đến máy chủ từ xa. Bạn có thể ghi đè phương pháp này.

Tăng một auditing event imaplib.send với các đối số self, data.

IMAP4.setacl(mailbox, who, what)

Đặt ACL cho mailbox. Phương pháp này không chuẩn nhưng được máy chủ Cyrus hỗ trợ.

IMAP4.setannotation(mailbox, entry, attribute[, ...])

Đặt ANNOTATIONs cho mailbox. Phương pháp này không chuẩn nhưng được máy chủ Cyrus hỗ trợ.

IMAP4.setquota(root, limits)

Đặt tài nguyên limits của quota root. Phương thức này là một phần của phần mở rộng IMAP4 QUOTA được xác định trong rfc2087.

IMAP4.shutdown()

Đóng kết nối được thiết lập trong open. Phương thức này được gọi ngầm bởi IMAP4.logout(). Bạn có thể ghi đè phương pháp này.

IMAP4.socket()

Trả về phiên bản socket được sử dụng để kết nối với máy chủ.

IMAP4.sort(sort_criteria, charset, search_criterion[, ...])

Lệnh sort là một biến thể của search với việc sắp xếp ngữ nghĩa cho kết quả. Dữ liệu trả về chứa một danh sách các số tin nhắn phù hợp được phân tách bằng dấu cách.

Sắp xếp có hai đối số trước (các) đối số search_criterion; danh sách được đặt trong ngoặc đơn của sort_criteriacharset đang tìm kiếm. Lưu ý rằng không giống như search, đối số tìm kiếm charset là bắt buộc. Ngoài ra còn có lệnh uid sort tương ứng với sort theo cách mà uid search tương ứng với search. Lệnh sort trước tiên tìm kiếm hộp thư để tìm các thư phù hợp với tiêu chí tìm kiếm đã cho bằng cách sử dụng đối số bộ ký tự để diễn giải các chuỗi trong tiêu chí tìm kiếm. Sau đó nó trả về số lượng tin nhắn phù hợp.

Đây là lệnh mở rộng IMAP4rev1.

IMAP4.starttls(ssl_context=None)

Gửi lệnh STARTTLS. Đối số ssl_context là tùy chọn và phải là đối tượng ssl.SSLContext. Điều này sẽ kích hoạt mã hóa trên kết nối IMAP. Vui lòng đọc Cân nhắc về bảo mật để biết cách thực hành tốt nhất.

Added in version 3.2.

Thay đổi trong phiên bản 3.4: Phương pháp này hiện hỗ trợ kiểm tra tên máy chủ bằng ssl.SSLContext.check_hostnameServer Name Indication (xem ssl.HAS_SNI).

IMAP4.status(mailbox, names)

Yêu cầu điều kiện trạng thái được đặt tên cho mailbox.

IMAP4.store(message_set, command, flag_list)

Thay đổi cách bố trí cờ cho thư trong hộp thư. command được chỉ định trong mục 6.4.6 của RFC 2060 là một trong các "FLAGS", "+FLAGS" hoặc "-FLAGS", tùy chọn có hậu tố ".SILENT".

Ví dụ: để đặt cờ xóa trên tất cả các tin nhắn:

typ, data = M.search(Không , 'ALL')
cho số trong dữ liệu [0].split():
   M.store(num, '+FLAGS', '\\Deleted')
M.expunge()

Ghi chú

Tạo cờ chứa ']' (ví dụ: "[test]") vi phạm RFC 3501 (giao thức IMAP). Tuy nhiên, imaplib trong lịch sử đã cho phép tạo các thẻ như vậy và các máy chủ IMAP phổ biến, chẳng hạn như Gmail, chấp nhận và tạo ra các cờ như vậy. Có những chương trình không phải Python cũng tạo các thẻ như vậy. Mặc dù đây là vi phạm RFC và máy khách cũng như máy chủ IMAP được cho là nghiêm ngặt, imaplib vẫn tiếp tục cho phép tạo các thẻ như vậy vì lý do tương thích ngược và kể từ Python 3.6, xử lý chúng nếu chúng được gửi từ máy chủ, vì điều này cải thiện khả năng tương thích trong thế giới thực.

IMAP4.subscribe(mailbox)

Đăng ký hộp thư mới.

IMAP4.thread(threading_algorithm, charset, search_criterion[, ...])

Lệnh thread là một biến thể của search với ngữ nghĩa phân luồng cho kết quả. Dữ liệu trả về chứa danh sách các thành viên luồng được phân tách bằng dấu cách.

Các thành viên luồng bao gồm 0 hoặc nhiều số tin nhắn, được phân cách bằng dấu cách, biểu thị cha và con kế tiếp.

Thread có hai đối số trước (các) đối số search_criterion; một threading_algorithmcharset đang tìm kiếm. Lưu ý rằng không giống như search, đối số tìm kiếm charset là bắt buộc. Ngoài ra còn có lệnh uid thread tương ứng với thread theo cách mà uid search tương ứng với search. Lệnh thread trước tiên tìm kiếm hộp thư để tìm các thư phù hợp với tiêu chí tìm kiếm đã cho bằng cách sử dụng đối số charset để diễn giải các chuỗi trong tiêu chí tìm kiếm. Sau đó nó trả về các thông điệp phù hợp được xâu chuỗi theo thuật toán phân luồng đã chỉ định.

Đây là lệnh mở rộng IMAP4rev1.

IMAP4.uid(command, arg[, ...])

Thực thi lệnh đối số với các tin nhắn được xác định bởi UID, thay vì số tin nhắn. Trả về phản hồi phù hợp với lệnh. Phải cung cấp ít nhất một đối số; nếu không được cung cấp, máy chủ sẽ trả về lỗi và một ngoại lệ sẽ được đưa ra.

IMAP4.unsubscribe(mailbox)

Hủy đăng ký khỏi hộp thư cũ.

IMAP4.unselect()

imaplib.IMAP4.unselect() giải phóng tài nguyên của máy chủ được liên kết với hộp thư đã chọn và đưa máy chủ về trạng thái xác thực. Lệnh này thực hiện các hành động tương tự như imaplib.IMAP4.close(), ngoại trừ việc không có thư nào bị xóa vĩnh viễn khỏi hộp thư hiện được chọn.

Added in version 3.9.

IMAP4.xatom(name[, ...])

Cho phép các lệnh mở rộng đơn giản được máy chủ thông báo trong phản hồi CAPABILITY.

Các thuộc tính sau được xác định trên các phiên bản của IMAP4:

IMAP4.PROTOCOL_VERSION

Giao thức được hỗ trợ gần đây nhất trong phản hồi CAPABILITY từ máy chủ.

IMAP4.debug

Giá trị số nguyên để kiểm soát đầu ra gỡ lỗi. Giá trị khởi tạo được lấy từ biến mô-đun Debug. Các giá trị lớn hơn ba theo dõi từng lệnh.

IMAP4.utf8_enabled

Giá trị Boolean thường là False nhưng được đặt thành True nếu lệnh enable() được ban hành thành công cho khả năng UTF8=ACCEPT.

Added in version 3.5.

IMAP4 Ví dụ

Đây là một ví dụ tối thiểu (không kiểm tra lỗi) mở hộp thư, truy xuất và in tất cả thư:

nhập getpass, imaplib

M = imaplib.IMAP4(host='example.org')
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(Không , 'ALL')
cho số trong dữ liệu [0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print('Tin nhắn %s\n%s\n' % (num, data[0][1]))
M.close()
M.đăng xuất()