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, Mailbox và Message, để 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
Mailboxxá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ừMailboxvà mã của bạn sẽ khởi tạo một lớp con cụ thể.Giao diện của
Mailboxgiố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ảnMailboxmà chúng sẽ được sử dụng và chỉ có ý nghĩa đối với phiên bảnMailboxđó. 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
Mailboxbằng phương thức giống tập hợpadd()và xóa bằng câu lệnhdelhoặc các phương thức giống tập hợpremove()vàdiscard().Ngữ nghĩa giao diện
Mailboxkhá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ảnMessage) 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ảnMailbox, 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ảnMailbox.Mailboxiterator 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ặpdictionarymặ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ệKeyErrornế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ứclock()và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
Mailboxcó 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ảnemail.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 conMessagecó định dạng cụ thể thích hợp (ví dụ: nếu đó là một phiên bảnmboxMessagevà đây là một phiên bảnmbox), 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ệ
KeyErrorsẽ đượ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ủadiscard()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ệ
KeyErrornế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ảnMessage, một phiên bảnemail.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 conMessagecó định dạng cụ thể phù hợp (ví dụ: nếu đó là một phiên bảnmboxMessagevà đây là một phiên bảnmbox), 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.
- keys()¶
Giống như
iterkeys(), ngoại trừ việclistđượ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
Messagecó đị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ảnMailboxđượ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ệclistđượ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
Messagecó đị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ảnMailboxđược khởi tạo.
- items()¶
Tương tự như
iteritems(), ngoại trừ việc trả về một cặplistthay 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ệKeyErrorsẽ 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 conMessagecó đị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ảnMailboxđượ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
Messagecó định dạng cụ thể thích hợp hoặc đưa ra một ngoại lệKeyErrornế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ệ
KeyErrornế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ệ
KeyErrornếu không tồn tại thông báo đó. Thông báo được xử lý thông quaemail.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ệ
KeyErrornế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ề
Truenếu key tương ứng với một tin nhắn,Falsenế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
Messagecó đị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ảnMailboxđượ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 conMessagecó đị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ảnMailboxđượ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 key và message 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ệKeyErrorsẽ được đưa ra, vì vậy nói chung việc arg là một phiên bảnMailboxlà 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
ExternalClashErrorsẽ 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
Mailboxdà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 factory làNonethìMaildirMessageđược sử dụng làm đại diện thông báo mặc định. Nếu create làTrue, hộp thư sẽ được tạo nếu nó không tồn tại.Nếu create là
Truevà đườ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,newvàcur. Tin nhắn được tạo tạm thời trong thư mục contmpvà sau đó được chuyển sang thư mục connewđể 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 concurvà 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ằngMaildirmà 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
coloncũng có thể được đặt trên cơ sở từng trường hợp.
Thay đổi trong phiên bản 3.13:
Maildirhiện bỏ qua các tệp có dấu chấm ở đầu.Các phiên bản
Maildircó tất cả các phương thức củaMailboxngoà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ệNoSuchMailboxErrorsẽ 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ệ
NotEmptyErrorsẽ 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ứcget_flags()của nó thay thế, vì những thay đổi được thực hiện bởi các phương thứcset_flags(),add_flag()và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ứcset_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ớiset_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ớiset_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ứcget_info()của nó thay thế, vì những thay đổi được thực hiện bởi phương thứcset_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ứcset_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
MailboxdoMaildirtriể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
Maildirkhô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
Mailboxdà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 factory làNonethìmboxMessageđược sử dụng làm đại diện thông báo mặc định. Nếu create làTrue, 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,
mboxtriể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
Mailboxdomboxtriể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ặcclose()trên phiên bảnmboxcó 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.
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
Mailboxdà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 factory làNonethìMHMessageđược sử dụng làm đại diện thông báo mặc định. Nếu create làTrue, 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_sequencestrong mỗi thư mục.Lớp
MHthao 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ệpcontexthoặ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
MHcó tất cả các phương thức củaMailboxngoà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ệNoSuchMailboxErrorsẽ 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ệ
NotEmptyErrorsẽ 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
MailboxdoMHtriể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()vàlockf(). Đối với hộp thư MH, khóa hộp thư có nghĩa là khóa tệp.mh_sequencesvà 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ì.
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ề mh và nmh, 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
Mailboxdà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 factory làNonethìBabylMessageđược sử dụng làm đại diện thông báo mặc định. Nếu create làTrue, 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
Babylcó tất cả các phương thức củaMailboxngoà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
MailboxdoBabyltriể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.
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
Mailboxdà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 factory làNonethìMMDFMessageđược sử dụng làm đại diện thông báo mặc định. Nếu create làTrue, 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
MailboxdoMMDFtriể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ặcclose()trên phiên bảnMMDFcó 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.
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
Messagecủa mô-đunemail.message. Các lớp con củamailbox.Messagethê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ảnMessage. 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ảnMailbox. Trong một số trường hợp, thời gian và bộ nhớ cần thiết để tạo biểu diễnMessagecó 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ảnMailboxcũ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ảnMailboxđượ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
newsang thư mục concursau 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 trongcurđề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ư trongnew.) 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
MaildirMessagecung 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 concur).Ghi chú
Một tin nhắn thường được chuyển từ
newsangcursau 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ắnmsgđã được đọc nếu"S" in msg.get_flags()là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'và'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 đề Status và X-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 |
|---|---|
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 |
|---|---|
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 |
|---|---|
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 đề Status và X-Status.
Cờ thông thường cho tin nhắn mbox như sau:
Cờ
Ý nghĩa
Giải thích
R
Đọc
Đọ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
mboxMessagecung 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ớitime.strftime()hoặcTrue(để sử dụngtime.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'và'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'và'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 |
|---|---|
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 |
|---|---|
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 |
|---|---|
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 |
|---|---|
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à mh và nmh 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
MHMessagecung 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 |
|---|---|
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 đề Status và X-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 |
|---|---|
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 |
|---|---|
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
BabylMessagesử 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
BabylMessagecung 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
Messagecó 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ảnemail.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, CC và Subject 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 |
|---|---|
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 đề Status và X-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 |
|---|---|
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 |
|---|---|
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 đề Status và X-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ũ
Đượ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
MMDFMessagecung cấp các phương thức sau, giống hệt với các phương thức domboxMessagecung 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ớitime.strftime()hoặcTrue(để sử dụngtime.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'và'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'và'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 |
|---|---|
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 |
|---|---|
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 |
|---|---|
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 |
|---|---|
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
Mailboxvới đường dẫn không tồn tại (và với tham số create được đặt thànhFalse) 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.
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ủ đề và '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 và 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()