mailbox --- Thao tác với hộp thư ở nhiều định dạng khác nhau

Source code: Lib/mailbox.py


Mô-đun này định nghĩa hai lớp, MailboxMessage, để truy cập và thao tác các hộp thư trên đĩa cũng như các thư chứa trong đó. Mailbox cung cấp khả năng ánh xạ giống như từ điển từ khóa đến tin nhắn. Message mở rộng lớp Message của mô-đun email.message với trạng thái và hành vi dành riêng cho định dạng. Các định dạng hộp thư được hỗ trợ là Maildir, mbox, MH, Babyl và MMDF.

Xem thêm

Mô-đun email

Đại diện và thao tác tin nhắn.

đối tượng Mailbox

class mailbox.Mailbox

Một hộp thư có thể được kiểm tra và sửa đổi.

Lớp Mailbox xác định một giao diện và không nhằm mục đích khởi tạo. Thay vào đó, các lớp con có định dạng cụ thể sẽ kế thừa từ Mailbox và mã của bạn sẽ khởi tạo một lớp con cụ thể.

Giao diện của Mailbox giống như từ điển, có các phím nhỏ tương ứng với tin nhắn. Các khóa được cấp bởi phiên bản Mailbox mà chúng sẽ được sử dụng và chỉ có ý nghĩa đối với phiên bản Mailbox đó. Một khóa tiếp tục xác định một thông báo ngay cả khi thông báo tương ứng bị sửa đổi, chẳng hạn như bằng cách thay thế nó bằng một thông báo khác.

Tin nhắn có thể được thêm vào phiên bản Mailbox bằng phương thức giống tập hợp add() và xóa bằng câu lệnh del hoặc các phương thức giống tập hợp remove()discard().

Ngữ nghĩa giao diện Mailbox khác với ngữ nghĩa từ điển ở một số điểm đáng chú ý. Mỗi khi một tin nhắn được yêu cầu, một đại diện mới (thường là phiên bản Message) sẽ được tạo dựa trên trạng thái hiện tại của hộp thư. Tương tự, khi một thông báo được thêm vào phiên bản Mailbox, nội dung của thông báo được cung cấp sẽ được sao chép. Trong cả hai trường hợp đều không có tham chiếu đến biểu diễn thông báo được giữ bởi phiên bản Mailbox.

Mailbox iterator mặc định lặp lại các biểu diễn thông báo chứ không phải các khóa như trình vòng lặp dictionary mặc định. Hơn nữa, việc sửa đổi hộp thư trong quá trình lặp lại là an toàn và được xác định rõ ràng. Các thông báo được thêm vào hộp thư sau khi trình vòng lặp được tạo sẽ không được trình vòng lặp nhìn thấy. Các thư bị xóa khỏi hộp thư trước khi trình vòng lặp mang lại chúng sẽ bị bỏ qua một cách âm thầm, mặc dù việc sử dụng khóa từ trình vòng lặp có thể dẫn đến ngoại lệ KeyError nếu thư tương ứng sau đó bị xóa.

Cảnh báo

Hãy hết sức thận trọng khi sửa đổi các hộp thư có thể bị thay đổi đồng thời bởi một số quy trình khác. Định dạng hộp thư an toàn nhất để sử dụng cho những tác vụ như vậy là Maildir; cố gắng tránh sử dụng các định dạng tệp đơn lẻ như mbox để ghi đồng thời. Nếu bạn đang sửa đổi một hộp thư, must sẽ khóa nó bằng cách gọi các phương thức lock()unlock() before để đọc bất kỳ thư nào trong tệp hoặc thực hiện bất kỳ thay đổi nào bằng cách thêm hoặc xóa thư. Không khóa hộp thư sẽ có nguy cơ bị mất tin nhắn hoặc làm hỏng toàn bộ hộp thư.

Các phiên bản Mailbox có các phương thức sau:

add(message)

Thêm message vào hộp thư và trả lại khóa đã được gán cho nó.

Tham số message có thể là một phiên bản Message, một phiên bản email.message.Message, một chuỗi, một chuỗi byte hoặc một đối tượng giống như tệp (cần mở ở chế độ nhị phân). Nếu message là một phiên bản của lớp con Message có định dạng cụ thể thích hợp (ví dụ: nếu đó là một phiên bản mboxMessage và đây là một phiên bản mbox), thì thông tin về định dạng cụ thể của nó sẽ được sử dụng. Mặt khác, các giá trị mặc định hợp lý cho thông tin có định dạng cụ thể sẽ được sử dụng.

Thay đổi trong phiên bản 3.2: Hỗ trợ cho đầu vào nhị phân đã được thêm vào.

remove(key)
__delitem__(key)
discard(key)

Xóa tin nhắn tương ứng với key khỏi hộp thư.

Nếu không có thông báo như vậy tồn tại, ngoại lệ KeyError sẽ được đưa ra nếu phương thức được gọi là remove() hoặc __delitem__() nhưng không có ngoại lệ nào được đưa ra nếu phương thức được gọi là discard(). Hoạt động của discard() có thể được ưu tiên hơn nếu định dạng hộp thư cơ bản hỗ trợ sửa đổi đồng thời bởi các quy trình khác.

__setitem__(key, message)

Thay thế tin nhắn tương ứng với key bằng message. Đưa ra ngoại lệ KeyError nếu không có thông báo nào tương ứng với key.

Giống như add(), tham số message có thể là một phiên bản Message, một phiên bản email.message.Message, một chuỗi, một chuỗi byte hoặc một đối tượng giống như tệp (cần mở ở chế độ nhị phân). Nếu message là một phiên bản của lớp con Message có định dạng cụ thể phù hợp (ví dụ: nếu đó là một phiên bản mboxMessage và đây là một phiên bản mbox), thì thông tin về định dạng cụ thể của nó sẽ được sử dụng. Mặt khác, thông tin về định dạng cụ thể của tin nhắn hiện tương ứng với key sẽ không thay đổi.

iterkeys()

Trả về iterator trên tất cả các phím

keys()

Giống như iterkeys(), ngoại trừ việc list được trả về thay vì iterator

itervalues()
__iter__()

Trả về iterator trên phần trình bày của tất cả tin nhắn. Các thông báo được biểu diễn dưới dạng các phiên bản của lớp con Message có định dạng cụ thể thích hợp trừ khi một nhà máy thông báo tùy chỉnh được chỉ định khi phiên bản Mailbox được khởi tạo.

Ghi chú

Hoạt động của __iter__() không giống như hoạt động của các từ điển lặp lại các phím.

values()

Giống như itervalues(), ngoại trừ việc list được trả về thay vì iterator

iteritems()

Trả về một cặp iterator trên (key, message), trong đó key là khóa và message là biểu diễn thông báo. Các thông báo được biểu diễn dưới dạng các phiên bản của lớp con Message có định dạng cụ thể thích hợp trừ khi một nhà máy thông báo tùy chỉnh được chỉ định khi phiên bản Mailbox được khởi tạo.

items()

Tương tự như iteritems(), ngoại trừ việc trả về một cặp list thay vì một cặp iterator.

get(key, default=None)
__getitem__(key)

Trả về đại diện của thông báo tương ứng với key. Nếu không có thông báo như vậy tồn tại, default sẽ được trả về nếu phương thức được gọi là get() và một ngoại lệ KeyError sẽ xuất hiện nếu phương thức đó được gọi là __getitem__(). Thông báo được biểu diễn dưới dạng một phiên bản của lớp con Message có định dạng cụ thể thích hợp trừ khi một nhà máy thông báo tùy chỉnh được chỉ định khi phiên bản Mailbox được khởi tạo.

get_message(key)

Trả về một biểu diễn của thông báo tương ứng với key dưới dạng một phiên bản của lớp con Message có định dạng cụ thể thích hợp hoặc đưa ra một ngoại lệ KeyError nếu không có thông báo như vậy tồn tại.

get_bytes(key)

Trả về biểu diễn byte của thông báo tương ứng với key hoặc đưa ra ngoại lệ KeyError nếu không tồn tại thông báo đó.

Added in version 3.2.

get_string(key)

Trả về một chuỗi biểu diễn thông báo tương ứng với key hoặc đưa ra một ngoại lệ KeyError nếu không tồn tại thông báo đó. Thông báo được xử lý thông qua email.message.Message để chuyển đổi nó thành bản trình bày rõ ràng 7 bit.

get_file(key)

Trả về biểu diễn file-like của thông báo tương ứng với key hoặc đưa ra ngoại lệ KeyError nếu không tồn tại thông báo như vậy. Đối tượng giống như tệp hoạt động như thể đang mở ở chế độ nhị phân. Tập tin này sẽ được đóng lại khi không còn cần thiết nữa.

Thay đổi trong phiên bản 3.2: Đối tượng tập tin thực sự là một binary file; trước đó nó được trả về không chính xác ở chế độ văn bản. Ngoài ra, file-like object hiện hỗ trợ giao thức context manager: bạn có thể sử dụng câu lệnh with để tự động đóng nó.

Ghi chú

Không giống như các cách biểu diễn thư khác, cách biểu diễn file-like không nhất thiết phải độc lập với phiên bản Mailbox đã tạo ra chúng hoặc với hộp thư cơ bản. Tài liệu cụ thể hơn được cung cấp bởi mỗi lớp con.

__contains__(key)

Trả về True nếu key tương ứng với một tin nhắn, False nếu không.

__len__()

Trả về số lượng tin nhắn trong hộp thư.

clear()

Xóa tất cả tin nhắn khỏi hộp thư.

pop(key, default=None)

Trả về đại diện của tin nhắn tương ứng với key và xóa tin nhắn. Nếu không có thông báo như vậy tồn tại, hãy trả về default. Thông báo được biểu diễn dưới dạng một phiên bản của lớp con Message có định dạng cụ thể thích hợp trừ khi một nhà máy thông báo tùy chỉnh được chỉ định khi phiên bản Mailbox được khởi tạo.

popitem()

Trả về một cặp (key, message) tùy ý, trong đó key là khóa và message là biểu thị thông báo và xóa thông báo tương ứng. Nếu hộp thư trống, hãy đưa ra ngoại lệ KeyError. Thông báo được biểu diễn dưới dạng một phiên bản của lớp con Message có định dạng cụ thể thích hợp trừ khi một nhà máy thông báo tùy chỉnh được chỉ định khi phiên bản Mailbox được khởi tạo.

update(arg)

Tham số arg phải là ánh xạ key-to-message hoặc có thể lặp lại các cặp (key, message). Cập nhật hộp thư sao cho, đối với mỗi keymessage nhất định, thông báo tương ứng với key được đặt thành message như thể sử dụng __setitem__(). Giống như __setitem__(), mỗi key phải tương ứng với một tin nhắn trong hộp thư, nếu không, một ngoại lệ KeyError sẽ được đưa ra, vì vậy nói chung việc arg là một phiên bản Mailbox là không chính xác.

Ghi chú

Không giống như từ điển, đối số từ khóa không được hỗ trợ.

flush()

Viết mọi thay đổi đang chờ xử lý vào hệ thống tập tin. Đối với một số lớp con Mailbox, các thay đổi luôn được ghi ngay lập tức và flush() không làm gì cả, nhưng bạn vẫn nên tạo thói quen gọi phương thức này.

lock()

Có được khóa tư vấn độc quyền trên hộp thư để các quy trình khác biết không sửa đổi nó. Một ExternalClashError sẽ xuất hiện nếu không có khóa. Cơ chế khóa cụ thể được sử dụng phụ thuộc vào định dạng hộp thư. Bạn nên always khóa hộp thư trước khi thực hiện bất kỳ sửa đổi nào đối với nội dung của nó.

unlock()

Nhả khóa trên hộp thư, nếu có.

close()

Xóa hộp thư, mở khóa nếu cần và đóng mọi tệp đang mở. Đối với một số lớp con Mailbox, phương thức này không có tác dụng gì.

đối tượng Maildir

class mailbox.Maildir(dirname, factory=None, create=True)

Một lớp con của Mailbox dành cho các hộp thư ở định dạng Maildir. Tham số factory là một đối tượng có thể gọi được, chấp nhận biểu diễn thông báo giống như tệp (hoạt động như thể được mở ở chế độ nhị phân) và trả về một biểu diễn tùy chỉnh. Nếu factoryNone thì MaildirMessage được sử dụng làm đại diện thông báo mặc định. Nếu createTrue, hộp thư sẽ được tạo nếu nó không tồn tại.

Nếu createTrue và đường dẫn dirname tồn tại, nó sẽ được coi là một maildir hiện có mà không cần cố gắng xác minh bố cục thư mục của nó.

Vì lý do lịch sử mà dirname được đặt tên như vậy chứ không phải path.

Maildir là một định dạng hộp thư dựa trên thư mục được phát minh cho tác nhân chuyển thư qmail và hiện được các chương trình khác hỗ trợ rộng rãi. Thư trong hộp thư Maildir được lưu trữ trong các tệp riêng biệt trong cấu trúc thư mục chung. Thiết kế này cho phép nhiều chương trình không liên quan truy cập và sửa đổi hộp thư Maildir mà không làm hỏng dữ liệu, do đó việc khóa tệp là không cần thiết.

Hộp thư Maildir chứa ba thư mục con, đó là: tmp, newcur. Tin nhắn được tạo tạm thời trong thư mục con tmp và sau đó được chuyển sang thư mục con new để hoàn tất quá trình gửi. Sau đó, tác nhân người dùng thư có thể di chuyển thư đến thư mục con cur và lưu trữ thông tin về trạng thái của thư trong phần "thông tin" đặc biệt được thêm vào tên tệp của nó.

Các thư mục theo kiểu do đại lý chuyển thư Courier giới thiệu cũng được hỗ trợ. Bất kỳ thư mục con nào của hộp thư chính đều được coi là thư mục nếu '.' là ký tự đầu tiên trong tên của nó. Tên thư mục được biểu thị bằng Maildir mà không có '.' đứng đầu. Mỗi thư mục bản thân nó là một hộp thư Maildir nhưng không được chứa các thư mục khác. Thay vào đó, việc lồng logic được biểu thị bằng cách sử dụng '.' để phân định các cấp độ, ví dụ: "Archived.2005.07".

colon

Đặc tả Maildir yêu cầu sử dụng dấu hai chấm (':') trong một số tên tệp thư nhất định. Tuy nhiên, một số hệ điều hành không cho phép ký tự này trong tên tệp. Nếu bạn muốn sử dụng định dạng giống Maildir trên hệ điều hành đó, bạn nên chỉ định một ký tự khác để sử dụng thay thế. Dấu chấm than ('!') là một lựa chọn phổ biến. Ví dụ:

nhập hộp thư
hộp thư.Maildir.colon = '!'

Thuộc tính colon cũng có thể được đặt trên cơ sở từng trường hợp.

Thay đổi trong phiên bản 3.13: Maildir hiện bỏ qua các tệp có dấu chấm ở đầu.

Các phiên bản Maildir có tất cả các phương thức của Mailbox ngoài các phương thức sau:

list_folders()

Trả về danh sách tên của tất cả các thư mục.

get_folder(folder)

Trả về một phiên bản Maildir đại diện cho thư mục có tên là folder. Ngoại lệ NoSuchMailboxError sẽ xuất hiện nếu thư mục không tồn tại.

add_folder(folder)

Tạo một thư mục có tên là folder và trả về một phiên bản Maildir đại diện cho nó.

remove_folder(folder)

Xóa thư mục có tên là folder. Nếu thư mục chứa bất kỳ thư nào, ngoại lệ NotEmptyError sẽ xuất hiện và thư mục sẽ không bị xóa.

clean()

Xóa các tệp tạm thời khỏi hộp thư chưa được truy cập trong 36 giờ qua. Đặc tả của Maildir nói rằng các chương trình đọc thư thỉnh thoảng nên thực hiện việc này.

get_flags(key)

Trả về dưới dạng chuỗi các cờ được đặt trên tin nhắn tương ứng với key. Điều này giống như get_message(key).get_flags() nhưng nhanh hơn nhiều vì nó không mở tệp tin nhắn. Sử dụng phương pháp này khi lặp lại các phím để xác định thông báo nào thú vị cần nhận.

Nếu bạn có một đối tượng MaildirMessage, hãy sử dụng phương thức get_flags() của nó thay thế, vì những thay đổi được thực hiện bởi các phương thức set_flags(), add_flag()remove_flag() của thư không được phản ánh ở đây cho đến khi phương thức __setitem__() của hộp thư được gọi.

Added in version 3.13.

set_flags(key, flags)

Trên thông báo tương ứng với key, hãy đặt các cờ do flags chỉ định và bỏ đặt tất cả các cờ khác. Gọi some_mailbox.set_flags(key, flags) cũng tương tự như

one_message = some_mailbox.get_message(key)
one_message.set_flags(cờ)
some_mailbox[key] = one_message

nhưng nhanh hơn vì nó không mở được file tin nhắn.

Nếu bạn có một đối tượng MaildirMessage, hãy sử dụng phương thức set_flags() của nó thay thế, vì những thay đổi được thực hiện bằng phương thức hộp thư này sẽ không hiển thị đối với phương thức của đối tượng thư, get_flags().

Added in version 3.13.

add_flag(key, flag)

Trên thông báo tương ứng với key, đặt các cờ do flag chỉ định mà không thay đổi các cờ khác. Để thêm nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

Những cân nhắc khi sử dụng phương pháp này so với phương thức add_flag() của đối tượng thông báo cũng tương tự như đối với set_flags(); xem cuộc thảo luận ở đó.

Added in version 3.13.

remove_flag(key, flag)

Trên thông báo tương ứng với key, bỏ đặt các cờ do flag chỉ định mà không thay đổi các cờ khác. Để xóa nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

Những cân nhắc khi sử dụng phương pháp này so với phương thức remove_flag() của đối tượng thông báo cũng tương tự như đối với set_flags(); xem cuộc thảo luận ở đó.

Added in version 3.13.

get_info(key)

Trả về một chuỗi chứa thông tin cho tin nhắn tương ứng với key. Điều này giống như get_message(key).get_info() nhưng nhanh hơn nhiều vì nó không mở tệp tin nhắn. Sử dụng phương pháp này khi lặp lại các phím để xác định thông báo nào thú vị cần nhận.

Nếu bạn có một đối tượng MaildirMessage, hãy sử dụng phương thức get_info() của nó thay thế, vì những thay đổi được thực hiện bởi phương thức set_info() của thư không được phản ánh ở đây cho đến khi phương thức __setitem__() của hộp thư được gọi.

Added in version 3.13.

set_info(key, info)

Đặt thông tin của tin nhắn tương ứng với key thành info. Gọi some_mailbox.set_info(key, flags) cũng tương tự như

one_message = some_mailbox.get_message(key)
one_message.set_info(thông tin)
some_mailbox[key] = one_message

nhưng nhanh hơn vì nó không mở được file tin nhắn.

Nếu bạn có một đối tượng MaildirMessage, hãy sử dụng phương thức set_info() của nó thay thế, vì những thay đổi được thực hiện bằng phương thức hộp thư này sẽ không hiển thị đối với phương thức của đối tượng thư, get_info().

Added in version 3.13.

Một số phương pháp Mailbox do Maildir triển khai đáng được nhận xét đặc biệt:

add(message)
__setitem__(key, message)
update(arg)

Cảnh báo

Các phương pháp này tạo ra tên tệp duy nhất dựa trên ID tiến trình hiện tại. Khi sử dụng nhiều luồng, xung đột tên không bị phát hiện có thể xảy ra và gây ra hỏng hộp thư trừ khi các luồng được phối hợp để tránh sử dụng các phương pháp này để thao tác đồng thời trên cùng một hộp thư.

flush()

Tất cả các thay đổi đối với hộp thư Maildir sẽ được áp dụng ngay lập tức, vì vậy phương pháp này không có tác dụng gì.

lock()
unlock()

Hộp thư Maildir không hỗ trợ (hoặc yêu cầu) khóa, vì vậy những phương pháp này không có tác dụng gì.

close()

Các phiên bản Maildir không giữ bất kỳ tệp đang mở nào và các hộp thư bên dưới không hỗ trợ khóa, vì vậy phương pháp này không có tác dụng gì.

get_file(key)

Tùy thuộc vào nền tảng máy chủ, có thể không sửa đổi hoặc xóa được thông báo cơ bản trong khi tệp được trả về vẫn mở.

Xem thêm

maildir man page from Courier

Một đặc điểm kỹ thuật của định dạng. Mô tả phần mở rộng chung cho các thư mục hỗ trợ.

Using maildir format

Ghi chú về Maildir của nhà phát minh ra nó. Bao gồm sơ đồ tạo tên cập nhật và chi tiết về ngữ nghĩa "thông tin".

đối tượng mbox

class mailbox.mbox(path, factory=None, create=True)

Một lớp con của Mailbox dành cho các hộp thư ở định dạng mbox. Tham số factory là một đối tượng có thể gọi được, chấp nhận biểu diễn thông báo giống như tệp (hoạt động như thể được mở ở chế độ nhị phân) và trả về một biểu diễn tùy chỉnh. Nếu factoryNone thì mboxMessage được sử dụng làm đại diện thông báo mặc định. Nếu createTrue, hộp thư sẽ được tạo nếu nó không tồn tại.

Định dạng mbox là định dạng cổ điển để lưu trữ thư trên hệ thống Unix. Tất cả thư trong hộp thư mbox được lưu trữ trong một tệp duy nhất với phần đầu mỗi thư được biểu thị bằng một dòng có năm ký tự đầu tiên là "Từ".

Một số biến thể của định dạng mbox tồn tại để giải quyết những thiếu sót trong bản gốc. Để đảm bảo khả năng tương thích, mbox triển khai định dạng ban đầu, đôi khi được gọi là mboxo. Điều này có nghĩa là tiêu đề Content-Length, nếu có, sẽ bị bỏ qua và mọi lần xuất hiện của "Từ " ở đầu dòng trong nội dung thư đều được chuyển đổi thành ">Từ " khi lưu trữ thư, mặc dù các lần xuất hiện của ">Từ " không được chuyển đổi thành "Từ " khi đọc thư.

Một số phương pháp Mailbox do mbox triển khai đáng được nhận xét đặc biệt:

get_bytes(key, from_=False)

Lưu ý: Phương thức này có thêm một tham số (from_) so với các lớp khác. Dòng đầu tiên của mục nhập tệp mbox là dòng Unix "Từ". Nếu from_ là Sai, dòng đầu tiên của tệp sẽ bị xóa.

get_file(key, from_=False)

Việc sử dụng tệp sau khi gọi flush() hoặc close() trên phiên bản mbox có thể mang lại kết quả không thể đoán trước hoặc gây ra ngoại lệ.

Lưu ý: Phương thức này có thêm một tham số (from_) so với các lớp khác. Dòng đầu tiên của mục nhập tệp mbox là dòng Unix "Từ". Nếu from_ là Sai, dòng đầu tiên của tệp sẽ bị xóa.

get_string(key, from_=False)

Lưu ý: Phương thức này có thêm một tham số (from_) so với các lớp khác. Dòng đầu tiên của mục nhập tệp mbox là dòng Unix "Từ". Nếu from_ là Sai, dòng đầu tiên của tệp sẽ bị xóa.

lock()
unlock()

Ba cơ chế khóa được sử dụng --- khóa dấu chấm và, nếu có, các lệnh gọi hệ thống flock()lockf().

Xem thêm

mbox man page from tin

Thông số kỹ thuật về định dạng, với các chi tiết về khóa.

Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad

Đối số để sử dụng định dạng mbox gốc thay vì một biến thể.

"mbox" is a family of several mutually incompatible mailbox formats

Lịch sử của các biến thể mbox.

đối tượng MH

class mailbox.MH(path, factory=None, create=True)

Một lớp con của Mailbox dành cho các hộp thư ở định dạng MH. Tham số factory là một đối tượng có thể gọi được, chấp nhận biểu diễn thông báo giống như tệp (hoạt động như thể được mở ở chế độ nhị phân) và trả về một biểu diễn tùy chỉnh. Nếu factoryNone thì MHMessage được sử dụng làm đại diện thông báo mặc định. Nếu createTrue, hộp thư sẽ được tạo nếu nó không tồn tại.

MH là định dạng hộp thư dựa trên thư mục được phát minh cho Hệ thống xử lý thư MH, một tác nhân người dùng thư. Mỗi thư trong hộp thư MH nằm trong tệp riêng của nó. Hộp thư MH có thể chứa các hộp thư MH khác (được gọi là folders) ngoài các tin nhắn. Các thư mục có thể được lồng vào nhau vô thời hạn. Hộp thư MH cũng hỗ trợ sequences, là danh sách được đặt tên dùng để nhóm các thư một cách hợp lý mà không cần di chuyển chúng vào các thư mục con. Trình tự được xác định trong một tệp có tên .mh_sequences trong mỗi thư mục.

Lớp MH thao tác các hộp thư MH, nhưng nó không cố gắng mô phỏng tất cả các hành vi của mh. Đặc biệt, nó không sửa đổi và không bị ảnh hưởng bởi các tệp context hoặc .mh_profile được mh sử dụng để lưu trữ trạng thái và cấu hình của nó.

Các phiên bản MH có tất cả các phương thức của Mailbox ngoài các phương thức sau:

Thay đổi trong phiên bản 3.13: Các thư mục được hỗ trợ không chứa tệp .mh_sequences.

list_folders()

Trả về danh sách tên của tất cả các thư mục.

get_folder(folder)

Trả về một phiên bản MH đại diện cho thư mục có tên là folder. Ngoại lệ NoSuchMailboxError sẽ xuất hiện nếu thư mục không tồn tại.

add_folder(folder)

Tạo một thư mục có tên là folder và trả về một phiên bản MH đại diện cho nó.

remove_folder(folder)

Xóa thư mục có tên là folder. Nếu thư mục chứa bất kỳ thư nào, ngoại lệ NotEmptyError sẽ xuất hiện và thư mục sẽ không bị xóa.

get_sequences()

Trả về một từ điển gồm các tên trình tự được ánh xạ tới danh sách khóa. Nếu không có chuỗi nào thì từ điển trống sẽ được trả về.

set_sequences(sequences)

Xác định lại các chuỗi tồn tại trong hộp thư dựa trên sequences, một từ điển tên được ánh xạ tới danh sách chính, giống như được trả về bởi get_sequences().

pack()

Đổi tên thư trong hộp thư nếu cần thiết để loại bỏ khoảng trống trong việc đánh số. Các mục trong danh sách trình tự được cập nhật tương ứng.

Ghi chú

Các khóa đã được cấp sẽ bị vô hiệu bởi thao tác này và không được sử dụng sau đó.

Một số phương pháp Mailbox do MH triển khai đáng được nhận xét đặc biệt:

remove(key)
__delitem__(key)
discard(key)

Những phương pháp này ngay lập tức xóa tin nhắn. Quy ước MH về việc đánh dấu một tin nhắn để xóa bằng cách thêm dấu phẩy vào trước tên của nó không được sử dụng.

lock()
unlock()

Ba cơ chế khóa được sử dụng --- khóa dấu chấm và, nếu có, các lệnh gọi hệ thống flock()lockf(). Đối với hộp thư MH, khóa hộp thư có nghĩa là khóa tệp .mh_sequences và chỉ trong khoảng thời gian thực hiện bất kỳ thao tác nào ảnh hưởng đến chúng, khóa các tệp tin riêng lẻ.

get_file(key)

Tùy thuộc vào nền tảng máy chủ, có thể không xóa được thông báo cơ bản trong khi tệp được trả về vẫn mở.

flush()

Tất cả các thay đổi đối với hộp thư MH sẽ được áp dụng ngay lập tức, vì vậy phương pháp này không có tác dụng gì.

close()

Các phiên bản MH không giữ bất kỳ tệp đang mở nào, vì vậy phương pháp này tương đương với unlock().

Xem thêm

nmh - Message Handling System

Trang chủ của nmh, phiên bản cập nhật của mh gốc.

MH & nmh: Email for Users & Programmers

Sách được cấp phép GPL về mhnmh, với một số thông tin về định dạng hộp thư.

đối tượng Babyl

class mailbox.Babyl(path, factory=None, create=True)

Một lớp con của Mailbox dành cho các hộp thư ở định dạng Babyl. Tham số factory là một đối tượng có thể gọi được, chấp nhận biểu diễn thông báo giống như tệp (hoạt động như thể được mở ở chế độ nhị phân) và trả về một biểu diễn tùy chỉnh. Nếu factoryNone thì BabylMessage được sử dụng làm đại diện thông báo mặc định. Nếu createTrue, hộp thư sẽ được tạo nếu nó không tồn tại.

Babyl là định dạng hộp thư một tệp được sử dụng bởi tác nhân người dùng thư Rmail đi kèm với Emacs. Phần đầu của thông báo được biểu thị bằng một dòng chứa hai ký tự Control-Underscore ('\037') và Control-L ('\014'). Sự kết thúc của tin nhắn được biểu thị bằng phần bắt đầu của tin nhắn tiếp theo hoặc, trong trường hợp tin nhắn cuối cùng, một dòng chứa ký tự Control-Underscore ('\037').

Thư trong hộp thư Babyl có hai bộ tiêu đề, tiêu đề gốc và cái gọi là tiêu đề hiển thị. Tiêu đề hiển thị thường là tập hợp con của tiêu đề ban đầu đã được định dạng lại hoặc rút gọn để hấp dẫn hơn. Mỗi thư trong hộp thư Babyl cũng có một danh sách labels đi kèm hoặc các chuỗi ngắn ghi lại thông tin bổ sung về thư và danh sách tất cả các nhãn do người dùng xác định tìm thấy trong hộp thư được lưu giữ trong phần tùy chọn Babyl.

Các phiên bản Babyl có tất cả các phương thức của Mailbox ngoài các phương thức sau:

get_labels()

Trả về danh sách tên của tất cả các nhãn do người dùng xác định được sử dụng trong hộp thư.

Ghi chú

Các thư thực tế được kiểm tra để xác định nhãn nào tồn tại trong hộp thư thay vì tham khảo danh sách nhãn trong phần tùy chọn Babyl, nhưng phần Babyl được cập nhật bất cứ khi nào hộp thư được sửa đổi.

Một số phương pháp Mailbox do Babyl triển khai đáng được nhận xét đặc biệt:

get_file(key)

Trong hộp thư Babyl, tiêu đề của thư không được lưu liền kề với nội dung của thư. Để tạo biểu diễn giống như tệp, tiêu đề và nội dung được sao chép cùng nhau vào một phiên bản io.BytesIO, phiên bản này có API giống hệt với phiên bản của một tệp. Kết quả là, đối tượng giống như tệp thực sự độc lập với hộp thư bên dưới nhưng không tiết kiệm bộ nhớ so với biểu diễn chuỗi.

lock()
unlock()

Ba cơ chế khóa được sử dụng --- khóa dấu chấm và, nếu có, các lệnh gọi hệ thống flock()lockf().

Xem thêm

Format of Version 5 Babyl Files

Một đặc điểm kỹ thuật của định dạng Babyl.

Reading Mail with Rmail

Hướng dẫn sử dụng Rmail, với một số thông tin về ngữ nghĩa của Babyl.

đối tượng MMDF

class mailbox.MMDF(path, factory=None, create=True)

Một lớp con của Mailbox dành cho các hộp thư ở định dạng MMDF. Tham số factory là một đối tượng có thể gọi được, chấp nhận biểu diễn thông báo giống như tệp (hoạt động như thể được mở ở chế độ nhị phân) và trả về một biểu diễn tùy chỉnh. Nếu factoryNone thì MMDFMessage được sử dụng làm đại diện thông báo mặc định. Nếu createTrue, hộp thư sẽ được tạo nếu nó không tồn tại.

MMDF là định dạng hộp thư một tệp được phát minh cho Cơ sở phân phối bản ghi nhớ đa kênh, một đại lý chuyển thư. Mỗi thông báo có dạng giống như thông báo mbox nhưng được đặt trong ngoặc trước và sau bằng các dòng chứa bốn ký tự Control-A ('\001'). Giống như định dạng mbox, phần đầu của mỗi thư được biểu thị bằng một dòng có năm ký tự đầu tiên là "Từ ", nhưng các lần xuất hiện bổ sung của "Từ " không được chuyển đổi thành ">Từ " khi lưu trữ thư vì các dòng phân tách thư bổ sung giúp tránh nhầm lẫn những lần xuất hiện như vậy với phần bắt đầu của các thư tiếp theo.

Một số phương pháp Mailbox do MMDF triển khai đáng được nhận xét đặc biệt:

get_bytes(key, from_=False)

Lưu ý: Phương thức này có thêm một tham số (from_) so với các lớp khác. Dòng đầu tiên của mục nhập tệp mbox là dòng Unix "Từ". Nếu from_ là Sai, dòng đầu tiên của tệp sẽ bị xóa.

get_file(key, from_=False)

Việc sử dụng tệp sau khi gọi flush() hoặc close() trên phiên bản MMDF có thể mang lại kết quả không thể đoán trước hoặc gây ra ngoại lệ.

Lưu ý: Phương thức này có thêm một tham số (from_) so với các lớp khác. Dòng đầu tiên của mục nhập tệp mbox là dòng Unix "Từ". Nếu from_ là Sai, dòng đầu tiên của tệp sẽ bị xóa.

lock()
unlock()

Ba cơ chế khóa được sử dụng --- khóa dấu chấm và, nếu có, các lệnh gọi hệ thống flock()lockf().

Xem thêm

mmdf man page from tin

Thông số kỹ thuật của định dạng MMDF từ tài liệu của tin, một trình đọc tin tức.

MMDF

Một bài viết trên Wikipedia mô tả Cơ sở phân phối bản ghi nhớ đa kênh.

đối tượng Message

class mailbox.Message(message=None)

Một lớp con của Message của mô-đun email.message. Các lớp con của mailbox.Message thêm trạng thái và hành vi dành riêng cho định dạng hộp thư.

Nếu message bị bỏ qua, phiên bản mới sẽ được tạo ở trạng thái trống, mặc định. Nếu message là một phiên bản email.message.Message, nội dung của nó sẽ được sao chép; hơn nữa, mọi thông tin về định dạng cụ thể đều được chuyển đổi trong chừng mực có thể nếu message là một phiên bản Message. Nếu message là một chuỗi, một chuỗi byte hoặc một tệp thì nó phải chứa một thông báo tuân thủ RFC 5322-, được đọc và phân tích cú pháp. Các tệp phải được mở ở chế độ nhị phân, nhưng các tệp ở chế độ văn bản được chấp nhận để tương thích ngược.

Trạng thái và hành vi dành riêng cho định dạng được cung cấp bởi các lớp con khác nhau, nhưng nói chung chỉ các thuộc tính không dành riêng cho một hộp thư cụ thể mới được hỗ trợ (mặc dù có lẽ các thuộc tính này dành riêng cho một định dạng hộp thư cụ thể). Ví dụ: các khoảng bù tệp cho các định dạng hộp thư một tệp và tên tệp cho các định dạng hộp thư dựa trên thư mục sẽ không được giữ lại vì chúng chỉ áp dụng cho hộp thư gốc. Tuy nhiên, trạng thái chẳng hạn như liệu thư đã được người dùng đọc hay được đánh dấu là quan trọng vẫn được giữ lại vì nó áp dụng cho chính thư đó.

Không có yêu cầu nào về việc sử dụng các phiên bản Message để thể hiện các tin nhắn được truy xuất bằng các phiên bản Mailbox. Trong một số trường hợp, thời gian và bộ nhớ cần thiết để tạo biểu diễn Message có thể không được chấp nhận. Đối với những tình huống như vậy, các phiên bản Mailbox cũng cung cấp các biểu diễn giống như chuỗi và tệp, đồng thời có thể chỉ định một nhà máy thông báo tùy chỉnh khi phiên bản Mailbox được khởi tạo.

đối tượng MaildirMessage

class mailbox.MaildirMessage(message=None)

Một thông báo có hành vi dành riêng cho Maildir. Tham số message có ý nghĩa tương tự như với hàm tạo Message.

Thông thường, ứng dụng tác nhân người dùng thư sẽ di chuyển tất cả thư trong thư mục con new sang thư mục con cur sau lần đầu tiên người dùng mở và đóng hộp thư, ghi lại rằng các thư đó đã cũ cho dù chúng có thực sự được đọc hay không. Mỗi tin nhắn trong cur đều có phần "thông tin" được thêm vào tên tệp để lưu trữ thông tin về trạng thái của nó. (Một số trình đọc thư cũng có thể thêm phần "thông tin" vào thư trong new.) Phần "thông tin" có thể có một trong hai dạng: có thể chứa "2", theo sau là danh sách các cờ được tiêu chuẩn hóa (ví dụ: "2,FR") hoặc có thể chứa "1", theo sau là cái gọi là thông tin thử nghiệm. Cờ tiêu chuẩn cho tin nhắn Maildir như sau:

Cờ

Ý nghĩa

Giải thích

D

bản nháp

Đang sáng tác

F

Đã gắn cờ

Được đánh dấu là quan trọng

P

Đã đậu

Đã chuyển tiếp, gửi lại hoặc bị trả lại

R

đã trả lời

Đã trả lời

S

Đã xem

Đọc

T

Đã chuyển vào thùng rác

Đánh dấu để xóa sau

Các phiên bản MaildirMessage cung cấp các phương thức sau:

get_subdir()

Trả về "mới" (nếu thư cần được lưu trữ trong thư mục con new) hoặc "cur" (nếu thư cần được lưu trữ trong thư mục con cur).

Ghi chú

Một tin nhắn thường được chuyển từ new sang cur sau khi hộp thư của nó được truy cập, cho dù tin nhắn đó đã được đọc hay chưa. Một tin nhắn msg đã được đọc nếu "S" in msg.get_flags()True.

set_subdir(subdir)

Đặt thư mục con mà tin nhắn sẽ được lưu trữ trong đó. Tham số subdir phải là "new" hoặc "cur".

get_flags()

Trả về một chuỗi chỉ định các cờ hiện được đặt. Nếu thư tuân theo định dạng Maildir tiêu chuẩn thì kết quả là sự ghép nối theo thứ tự bảng chữ cái bằng 0 hoặc một lần xuất hiện của mỗi 'D', 'F', 'P', 'R', 'S''T'. Chuỗi trống được trả về nếu không có cờ nào được đặt hoặc nếu "thông tin" chứa ngữ nghĩa thử nghiệm.

set_flags(flags)

Đặt các cờ được chỉ định bởi flags và bỏ đặt tất cả các cờ khác.

add_flag(flag)

Đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để thêm nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự. "Thông tin" hiện tại sẽ bị ghi đè cho dù nó có chứa thông tin thử nghiệm thay vì cờ hay không.

remove_flag(flag)

Bỏ đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để xóa nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự. Nếu "thông tin" chứa thông tin thử nghiệm chứ không phải cờ thì "thông tin" hiện tại không được sửa đổi.

get_date()

Trả về ngày gửi tin nhắn dưới dạng số dấu phẩy động biểu thị số giây kể từ kỷ nguyên.

set_date(date)

Đặt ngày gửi tin nhắn thành date, một số dấu phẩy động biểu thị số giây kể từ kỷ nguyên.

get_info()

Trả về một chuỗi chứa "thông tin" cho tin nhắn. Điều này hữu ích cho việc truy cập và sửa đổi "thông tin" mang tính thử nghiệm (tức là không phải danh sách các cờ).

set_info(info)

Đặt "thông tin" thành info, phải là một chuỗi.

Khi một phiên bản MaildirMessage được tạo dựa trên phiên bản mboxMessage hoặc MMDFMessage, các tiêu đề StatusX-Status sẽ bị bỏ qua và các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái mboxMessage hoặc MMDFMessage

thư mục con "cur"

Hỡi lá cờ

Cờ F

Cờ F

Cờ R

Một lá cờ

Cờ chữ S

Cờ R

Cờ chữ T

Cờ D

Khi một phiên bản MaildirMessage được tạo dựa trên phiên bản MHMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MHMessage

thư mục con "cur"

trình tự "không nhìn thấy"

thư mục con "cur" và cờ S

không có trình tự "không nhìn thấy"

Cờ F

trình tự "được gắn cờ"

Cờ R

trình tự "trả lời"

Khi một phiên bản MaildirMessage được tạo dựa trên phiên bản BabylMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái BabylMessage

thư mục con "cur"

nhãn "không nhìn thấy"

thư mục con "cur" và cờ S

không có nhãn "không nhìn thấy"

Cờ P

nhãn "đã chuyển tiếp" hoặc "gửi lại"

Cờ R

nhãn "đã trả lời"

Cờ chữ T

nhãn "đã xóa"

đối tượng mboxMessage

class mailbox.mboxMessage(message=None)

Một thông báo có hành vi dành riêng cho mbox. Tham số message có ý nghĩa tương tự như với hàm tạo Message.

Thư trong hộp thư mbox được lưu trữ cùng nhau trong một tệp duy nhất. Địa chỉ phong bì của người gửi và thời gian gửi thường được lưu trữ trong một dòng bắt đầu bằng "Từ" được sử dụng để biểu thị sự bắt đầu của thư, mặc dù có sự khác biệt đáng kể về định dạng chính xác của dữ liệu này trong quá trình triển khai mbox. Các cờ cho biết trạng thái của thư, chẳng hạn như thư đã được đọc hay được đánh dấu là quan trọng, thường được lưu trữ trong tiêu đề StatusX-Status.

Cờ thông thường cho tin nhắn mbox như sau:

Cờ

Ý nghĩa

Giải thích

R

Đọc

Đọc

Được phát hiện trước đó bởi MUA

D

Đã xóa

Đánh dấu để xóa sau

F

Đã gắn cờ

Được đánh dấu là quan trọng

A

Đã trả lời

Đã trả lời

Cờ "R" và "O" được lưu trữ trong tiêu đề Status và cờ "D", "F" và "A" được lưu trữ trong tiêu đề X-Status. Các cờ và tiêu đề thường xuất hiện theo thứ tự được đề cập.

Các phiên bản mboxMessage cung cấp các phương thức sau:

get_from()

Trả về một chuỗi đại diện cho dòng "Từ" đánh dấu sự bắt đầu của thư trong hộp thư mbox. Dòng "Từ" ở đầu và dòng mới ở cuối đều bị loại trừ.

set_from(from_, time_=None)

Đặt dòng "Từ " thành from_, dòng này phải được chỉ định mà không có dòng "Từ " ở đầu hoặc dòng mới ở cuối. Để thuận tiện, time_ có thể được chỉ định và sẽ được định dạng phù hợp và gắn vào from_. Nếu time_ được chỉ định, thì đó phải là một phiên bản time.struct_time, một bộ dữ liệu phù hợp để chuyển tới time.strftime() hoặc True (để sử dụng time.gmtime()).

get_flags()

Trả về một chuỗi chỉ định các cờ hiện được đặt. Nếu thông báo tuân theo định dạng thông thường thì kết quả là sự ghép nối theo thứ tự 0 sau đây hoặc một lần xuất hiện của mỗi 'R', 'O', 'D', 'F''A'.

set_flags(flags)

Đặt các cờ được chỉ định bởi flags và bỏ đặt tất cả các cờ khác. Tham số flags phải là phép nối theo bất kỳ thứ tự nào, không có hoặc nhiều lần xuất hiện của mỗi 'R', 'O', 'D', 'F''A'.

add_flag(flag)

Đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để thêm nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

remove_flag(flag)

Bỏ đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để xóa nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

Khi một phiên bản mboxMessage được tạo dựa trên phiên bản MaildirMessage, dòng "Từ " được tạo dựa trên ngày phân phối của phiên bản MaildirMessage và các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MaildirMessage

Cờ R

Cờ chữ S

Hỡi lá cờ

thư mục con "cur"

Cờ D

Cờ chữ T

Cờ F

Cờ F

Một lá cờ

Cờ R

Khi một phiên bản mboxMessage được tạo dựa trên phiên bản MHMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MHMessage

Cờ R và cờ O

không có trình tự "không nhìn thấy"

Hỡi lá cờ

trình tự "không nhìn thấy"

Cờ F

trình tự "được gắn cờ"

Một lá cờ

trình tự "trả lời"

Khi một phiên bản mboxMessage được tạo dựa trên phiên bản BabylMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái BabylMessage

Cờ R và cờ O

không có nhãn "không nhìn thấy"

Hỡi lá cờ

nhãn "không nhìn thấy"

Cờ D

nhãn "đã xóa"

Một lá cờ

nhãn "đã trả lời"

Khi một phiên bản mboxMessage được tạo dựa trên một phiên bản MMDFMessage, dòng "Từ " sẽ được sao chép và tất cả các cờ tương ứng trực tiếp:

Trạng thái kết quả

trạng thái MMDFMessage

Cờ R

Cờ R

Hỡi lá cờ

Hỡi lá cờ

Cờ D

Cờ D

Cờ F

Cờ F

Một lá cờ

Một lá cờ

đối tượng MHMessage

class mailbox.MHMessage(message=None)

Một tin nhắn với các hành vi cụ thể của MH. Tham số message có ý nghĩa tương tự như với hàm tạo Message.

Các bản tin MH không hỗ trợ các nhãn hiệu hoặc cờ theo nghĩa truyền thống, nhưng chúng hỗ trợ các chuỗi, là các nhóm logic của các bản tin tùy ý. Một số chương trình đọc thư (mặc dù không phải là mhnmh tiêu chuẩn) sử dụng các chuỗi theo cách tương tự như cách sử dụng cờ với các định dạng khác, như sau:

trình tự

Giải thích

không thể thấy được

Chưa đọc nhưng đã được MUA phát hiện trước đó

đã trả lời

Đã trả lời

bị gắn cờ

Được đánh dấu là quan trọng

Các phiên bản MHMessage cung cấp các phương thức sau:

get_sequences()

Trả về danh sách tên của các chuỗi có chứa thông báo này.

set_sequences(sequences)

Đặt danh sách các chuỗi bao gồm thông báo này.

add_sequence(sequence)

Thêm sequence vào danh sách các chuỗi có thông báo này.

remove_sequence(sequence)

Xóa sequence khỏi danh sách các chuỗi có thông báo này.

Khi một phiên bản MHMessage được tạo dựa trên phiên bản MaildirMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MaildirMessage

trình tự "không nhìn thấy"

không có cờ S

trình tự "trả lời"

Cờ R

trình tự "được gắn cờ"

Cờ F

Khi một phiên bản MHMessage được tạo dựa trên phiên bản mboxMessage hoặc MMDFMessage, các tiêu đề StatusX-Status sẽ bị bỏ qua và các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái mboxMessage hoặc MMDFMessage

trình tự "không nhìn thấy"

không có cờ R

trình tự "trả lời"

Một lá cờ

trình tự "được gắn cờ"

Cờ F

Khi một phiên bản MHMessage được tạo dựa trên phiên bản BabylMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái BabylMessage

trình tự "không nhìn thấy"

nhãn "không nhìn thấy"

trình tự "trả lời"

nhãn "đã trả lời"

đối tượng BabylMessage

class mailbox.BabylMessage(message=None)

Một tin nhắn với các hành vi cụ thể của Baby. Tham số message có ý nghĩa tương tự như với hàm tạo Message.

Một số nhãn thông báo nhất định, được gọi là attributes, được xác định theo quy ước để có ý nghĩa đặc biệt. Các thuộc tính như sau:

Nhãn

Giải thích

không thể thấy được

Chưa đọc nhưng đã được MUA phát hiện trước đó

đã xóa

Đánh dấu để xóa sau

nộp đơn

Đã sao chép sang tập tin hoặc hộp thư khác

đã trả lời

Đã trả lời

chuyển tiếp

Đã chuyển tiếp

đã chỉnh sửa

Được sửa đổi bởi người dùng

bực bội

Bực bội

Theo mặc định, Rmail chỉ hiển thị các tiêu đề hiển thị. Tuy nhiên, lớp BabylMessage sử dụng các tiêu đề ban đầu vì chúng hoàn thiện hơn. Các tiêu đề hiển thị có thể được truy cập một cách rõ ràng nếu muốn.

Các phiên bản BabylMessage cung cấp các phương thức sau:

get_labels()

Trả về danh sách các nhãn trên tin nhắn.

set_labels(labels)

Đặt danh sách nhãn trên tin nhắn thành labels.

add_label(label)

Thêm label vào danh sách nhãn trên tin nhắn.

remove_label(label)

Xóa label khỏi danh sách nhãn trên tin nhắn.

get_visible()

Trả về một phiên bản Message có tiêu đề là tiêu đề hiển thị của tin nhắn và nội dung trống.

set_visible(visible)

Đặt tiêu đề hiển thị của tin nhắn giống với tiêu đề trong message. Tham số visible phải là một phiên bản Message, một phiên bản email.message.Message, một chuỗi hoặc một đối tượng giống như tệp (phải mở ở chế độ văn bản).

update_visible()

Khi các tiêu đề ban đầu của phiên bản BabylMessage được sửa đổi, các tiêu đề hiển thị sẽ không tự động được sửa đổi cho tương ứng. Phương pháp này cập nhật các tiêu đề hiển thị như sau: mỗi tiêu đề hiển thị với tiêu đề gốc tương ứng được đặt thành giá trị của tiêu đề gốc, mỗi tiêu đề hiển thị không có tiêu đề gốc tương ứng sẽ bị xóa và bất kỳ tiêu đề nào trong số Date, From, Reply-To, To, CCSubject có trong tiêu đề gốc nhưng không phải tiêu đề hiển thị đều được thêm vào tiêu đề hiển thị.

Khi một phiên bản BabylMessage được tạo dựa trên phiên bản MaildirMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MaildirMessage

nhãn "không nhìn thấy"

không có cờ S

nhãn "đã xóa"

Cờ chữ T

nhãn "đã trả lời"

Cờ R

nhãn "chuyển tiếp"

Cờ P

Khi một phiên bản BabylMessage được tạo dựa trên phiên bản mboxMessage hoặc MMDFMessage, các tiêu đề StatusX-Status sẽ bị bỏ qua và các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái mboxMessage hoặc MMDFMessage

nhãn "không nhìn thấy"

không có cờ R

nhãn "đã xóa"

Cờ D

nhãn "đã trả lời"

Một lá cờ

Khi một phiên bản BabylMessage được tạo dựa trên phiên bản MHMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MHMessage

nhãn "không nhìn thấy"

trình tự "không nhìn thấy"

nhãn "đã trả lời"

trình tự "trả lời"

đối tượng MMDFMessage

class mailbox.MMDFMessage(message=None)

Một thông báo có hành vi dành riêng cho MMDF. Tham số message có ý nghĩa tương tự như với hàm tạo Message.

Giống như tin nhắn trong hộp thư mbox, tin nhắn MMDF được lưu trữ cùng với địa chỉ người gửi và ngày gửi ở dòng đầu tiên bắt đầu bằng "Từ". Tương tự, các cờ cho biết trạng thái của thông báo thường được lưu trữ trong các tiêu đề StatusX-Status.

Cờ thông thường cho tin nhắn MMDF giống hệt với cờ của tin nhắn mbox và như sau:

Cờ

Ý nghĩa

Giải thích

R

Đọc

Đọc

Được phát hiện trước đó bởi MUA

D

Đã xóa

Đánh dấu để xóa sau

F

Đã gắn cờ

Được đánh dấu là quan trọng

A

Đã trả lời

Đã trả lời

Cờ "R" và "O" được lưu trữ trong tiêu đề Status và cờ "D", "F" và "A" được lưu trữ trong tiêu đề X-Status. Các cờ và tiêu đề thường xuất hiện theo thứ tự được đề cập.

Các phiên bản MMDFMessage cung cấp các phương thức sau, giống hệt với các phương thức do mboxMessage cung cấp:

get_from()

Trả về một chuỗi đại diện cho dòng "Từ" đánh dấu sự bắt đầu của thư trong hộp thư mbox. Dòng "Từ" ở đầu và dòng mới ở cuối đều bị loại trừ.

set_from(from_, time_=None)

Đặt dòng "Từ " thành from_, dòng này phải được chỉ định mà không có dòng "Từ " ở đầu hoặc dòng mới ở cuối. Để thuận tiện, time_ có thể được chỉ định và sẽ được định dạng phù hợp và gắn vào from_. Nếu time_ được chỉ định, thì đó phải là một phiên bản time.struct_time, một bộ dữ liệu phù hợp để chuyển tới time.strftime() hoặc True (để sử dụng time.gmtime()).

get_flags()

Trả về một chuỗi chỉ định các cờ hiện được đặt. Nếu thông báo tuân theo định dạng thông thường thì kết quả là sự ghép nối theo thứ tự 0 sau đây hoặc một lần xuất hiện của mỗi 'R', 'O', 'D', 'F''A'.

set_flags(flags)

Đặt các cờ được chỉ định bởi flags và bỏ đặt tất cả các cờ khác. Tham số flags phải là phép nối theo bất kỳ thứ tự nào, không có hoặc nhiều lần xuất hiện của mỗi 'R', 'O', 'D', 'F''A'.

add_flag(flag)

Đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để thêm nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

remove_flag(flag)

Bỏ đặt (các) cờ được chỉ định bởi flag mà không thay đổi các cờ khác. Để xóa nhiều cờ cùng một lúc, flag có thể là một chuỗi gồm nhiều ký tự.

Khi một phiên bản MMDFMessage được tạo dựa trên phiên bản MaildirMessage, dòng "Từ " được tạo dựa trên ngày phân phối của phiên bản MaildirMessage và các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MaildirMessage

Cờ R

Cờ chữ S

Hỡi lá cờ

thư mục con "cur"

Cờ D

Cờ chữ T

Cờ F

Cờ F

Một lá cờ

Cờ R

Khi một phiên bản MMDFMessage được tạo dựa trên phiên bản MHMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái MHMessage

Cờ R và cờ O

không có trình tự "không nhìn thấy"

Hỡi lá cờ

trình tự "không nhìn thấy"

Cờ F

trình tự "được gắn cờ"

Một lá cờ

trình tự "trả lời"

Khi một phiên bản MMDFMessage được tạo dựa trên phiên bản BabylMessage, các chuyển đổi sau sẽ diễn ra:

Trạng thái kết quả

trạng thái BabylMessage

Cờ R và cờ O

không có nhãn "không nhìn thấy"

Hỡi lá cờ

nhãn "không nhìn thấy"

Cờ D

nhãn "đã xóa"

Một lá cờ

nhãn "đã trả lời"

Khi một phiên bản MMDFMessage được tạo dựa trên một phiên bản mboxMessage, dòng "Từ " sẽ được sao chép và tất cả các cờ tương ứng trực tiếp:

Trạng thái kết quả

trạng thái mboxMessage

Cờ R

Cờ R

Hỡi lá cờ

Hỡi lá cờ

Cờ D

Cờ D

Cờ F

Cờ F

Một lá cờ

Một lá cờ

Ngoại lệ

Các lớp ngoại lệ sau được xác định trong mô-đun mailbox:

exception mailbox.Error

Lớp cơ sở cho tất cả các ngoại lệ khác dành riêng cho mô-đun.

exception mailbox.NoSuchMailboxError

Xảy ra khi mong đợi nhưng không tìm thấy hộp thư, chẳng hạn như khi khởi tạo lớp con Mailbox với đường dẫn không tồn tại (và với tham số create được đặt thành False) hoặc khi mở một thư mục không tồn tại.

exception mailbox.NotEmptyError

Xảy ra khi hộp thư không trống nhưng dự kiến sẽ trống, chẳng hạn như khi xóa thư mục chứa thư.

exception mailbox.ExternalClashError

Xảy ra khi một số điều kiện liên quan đến hộp thư nằm ngoài tầm kiểm soát của chương trình khiến chương trình không thể tiếp tục, chẳng hạn như khi không lấy được khóa mà chương trình khác đã nắm giữ hoặc khi tên tệp được tạo duy nhất đã tồn tại.

exception mailbox.FormatError

Xảy ra khi không thể phân tích cú pháp dữ liệu trong tệp, chẳng hạn như khi phiên bản MH cố đọc tệp .mh_sequences bị hỏng.

Ví dụ

Một ví dụ đơn giản về việc in chủ đề của tất cả thư trong hộp thư có vẻ thú vị:

nhập hộp thư
cho thư trong hòm thư.mbox('~/mbox'):
    chủ đề = tin nhắn ['chủ đề'] # Could có thể là Không có.
    nếu chủ đề  'python' trong topic.low():
        in (chủ đề)

Để sao chép tất cả thư từ hộp thư Babyl sang hộp thư MH, chuyển đổi tất cả thông tin theo định dạng cụ thể có thể được chuyển đổi:

nhập hộp thư
đích = hộp thư.MH('~/Mail')
đích.lock()
cho tin nhắn trong hộp thư.Babyl('~/RMAIL'):
    Destination.add(mailbox.MHMessage(tin nhắn))
đích.flush()
đích.unlock()

Ví dụ này sắp xếp thư từ nhiều danh sách gửi thư vào các hộp thư khác nhau, cẩn thận để tránh hỏng thư do các chương trình khác sửa đổi đồng thời, mất thư do gián đoạn chương trình hoặc chấm dứt sớm do thư trong hộp thư không đúng định dạng:

nhập hộp thư
nhập email.errors

list_names = ('python-list', 'python-dev', 'python-bugs')

hộp = {name: hòm thư.mbox('~/email/%s' % name) cho tên trong list_names}
inbox = hòm thư.Maildir('~/Maildir', Factory=None)

cho khóa trong inbox.iterkeys():
    thử:
        tin nhắn = hộp thư đến[key]
    ngoại trừ email.errors.MessageParseError:
        tiếp tục tin nhắn # The không đúng định dạng. Cứ để đó đi.

    cho tên trong list_names:
        list_id = tin nhắn['list-id']
        nếu list_id  tên trong list_id:
            hộp thư # Get để sử dụng
            hộp = hộp [tên]

            # Write sao chép vào đĩa trước khi xóa bản gốc.
            # If đang xảy ra sự cố, bạn có thể sao chép một tin nhắn, nhưng
            # that còn hơn là mất tin nhắn hoàn toàn.
            hộp.lock()
            box.add(tin nhắn)
            box.flush()
            box.unlock()

            tin nhắn gốc # Remove
            hộp thư đến.lock()
            inbox.discard(key)
            hộp thư đến.flush()
            hộp thư đến.unlock()
            phá vỡ đích # Found nên đừng tìm nữa.

cho hộp trong hộp.itervalues():
    hộp.close()