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_SSL và IMAP4_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
IMAP4hỗ trợ câu lệnhwith. Khi được sử dụng như thế này, lệnh IMAP4LOGOUTsẽ tự động được đưa ra khi câu lệnhwiththoát. Ví dụ:>>> từ nhập imaplib IMAP4 >>> với IMAP4("domain.org") là 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ừ
IMAP4kế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ượngssl.SSLContextcho 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_hostnamevà Server Name Indication (xemssl.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ố keyfile và certfile 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ệpstdin/stdoutđược tạo bằng cách chuyển command đếnsubprocess.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
INTERNALDATEvà trả về giờ địa phương tương ứng. Giá trị trả về là bộtime.struct_timehoặcNonenế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
FLAGSthà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ởitime.time()), một bộ 9 biểu thị giờ địa phương, một phiên bản củatime.struct_time(được trả về bởitime.localtime()), một phiên bản nhận biết củadatetime.datetimehoặ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' và 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 data là bytes 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ạngAUTH=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ềbytesdata sẽ được mã hóa base64 và gửi đến máy chủ. Nó sẽ trả vềNonenế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-8thay 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).
- 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
EXPUNGEcho mỗi tin nhắn đã xóa. Dữ liệu trả về chứa danh sách các số tin nhắnEXPUNGEtheo 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ủCyrushỗ 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ủCyrushỗ trợ.
- IMAP4.getquota(root)¶
Nhận giới hạn và mức sử dụng tài nguyên của
quotaroot. 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
quotarootscho 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 IMAP4IDLEnhư được định nghĩa trong RFC 2177.Đối tượng được trả về sẽ gửi lệnh
IDLEkhi được kích hoạt bằng câu lệnhwith, 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ửiDONEkhi 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ảnhwith) có thể được truy xuất theo cách thông thường sau khiIDLEkết thúc, sử dụngIMAP4.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à
inthoặcfloathoặcNonekhô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àNonetrên các kết nốiIMAP4_stream.>>> với M.idle(duration=29 * 60) là 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
inthoặcfloat).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
EXPUNGEnhanh 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() là 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ớiIMAP4.idle(), được tôn trọng khi chờ phản hồi đầu tiên trong một loạt. Do đó, mộtIdlerhế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ệnhwith. 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ằngIMAP4.response().Ghi chú
Tên và cấu trúc lớp
Idlerlà 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-MD5khi 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ồiCAPABILITYcủ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
BYEcủ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.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ăngValueErrorđể 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ạoIMAP4. 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ứcIMAP4.read(),IMAP4.readline(),IMAP4.send()vàIMAP4.shutdown(). Bạn có thể ghi đè phương pháp này.Tăng một auditing event
imaplib.openvớ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à
Nonenếu không có tin nhắn mới, giá trị khác của phản hồiRECENT.
- 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óCHARSETnà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àNonenếu khả năngUTF8=ACCEPTđược bật bằng lệnhenable().Ví dụ:
# M là một phiên bản IMAP4 được kết nối... typ, msgnums = M.search(Không có, 'FROM', '"LDJ"') # or: typ, msgnums = M.search(Không có, '(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.sendvới các đối sốself,data.
- IMAP4.setacl(mailbox, who, what)¶
Đặt
ACLcho mailbox. Phương pháp này không chuẩn nhưng được máy chủCyrushỗ 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ủCyrushỗ trợ.
- IMAP4.setquota(root, limits)¶
Đặt tài nguyên limits của
quotaroot. 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ởiIMAP4.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
sortlà một biến thể củasearchvớ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_criteria và charset đ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ệnhuid sorttương ứng vớisorttheo cách màuid searchtương ứng vớisearch. Lệnhsorttrướ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ượngssl.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_hostnamevà Server Name Indication (xemssl.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 có, '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
threadlà một biến thể củasearchvớ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_algorithm và charset đ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ệnhuid threadtương ứng vớithreadtheo cách màuid searchtương ứng vớisearch. Lệnhthreadtrướ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
CAPABILITYtừ 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 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 có, '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()