email --- Gói xử lý email và MIME¶
Source code: Lib/email/__init__.py
Gói email là một thư viện để quản lý email. Nó được thiết kế đặc biệt not để thực hiện bất kỳ việc gửi email nào đến SMTP (RFC 2821), NNTP hoặc các máy chủ khác; đó là các chức năng của các mô-đun như smtplib. Gói email cố gắng tuân thủ RFC nhất có thể, hỗ trợ RFC 5322 và RFC 6532, cũng như các RFC liên quan đến MIME như RFC 2045, RFC 2046, RFC 2047, RFC 2183 và RFC 2231.
Cấu trúc tổng thể của gói email có thể được chia thành ba thành phần chính, cộng với thành phần thứ tư kiểm soát hoạt động của các thành phần khác.
Thành phần trung tâm của gói là một "mô hình đối tượng" đại diện cho các email. Một ứng dụng tương tác với gói chủ yếu thông qua giao diện mô hình đối tượng được xác định trong mô-đun phụ message. Ứng dụng có thể sử dụng API này để đặt câu hỏi về email hiện có, tạo email mới hoặc thêm hoặc xóa các thành phần phụ email sử dụng cùng một giao diện mô hình đối tượng. Nghĩa là, theo bản chất của thông báo email và các thành phần phụ MIME của chúng, mô hình đối tượng email là cấu trúc cây của các đối tượng đều cung cấp EmailMessage API.
Hai thành phần chính khác của gói là parser và generator. Trình phân tích cú pháp lấy phiên bản được tuần tự hóa của một email (một luồng byte) và chuyển đổi nó thành một cây gồm các đối tượng EmailMessage. Trình tạo lấy một EmailMessage và biến nó trở lại thành luồng byte được tuần tự hóa. (Trình phân tích cú pháp và trình tạo cũng xử lý các luồng ký tự văn bản, nhưng cách sử dụng này không được khuyến khích vì rất dễ dẫn đến các thông báo không hợp lệ theo cách này hay cách khác.)
Thành phần điều khiển là mô-đun policy. Mọi EmailMessage, mọi generator và mọi parser đều có một đối tượng policy liên quan để điều khiển hành vi của nó. Thông thường, ứng dụng chỉ cần chỉ định chính sách khi tạo EmailMessage, bằng cách khởi tạo trực tiếp EmailMessage để tạo email mới hoặc bằng cách phân tích luồng đầu vào bằng parser. Tuy nhiên, chính sách có thể được thay đổi khi tin nhắn được tuần tự hóa bằng generator. Ví dụ: điều này cho phép phân tích cú pháp một thư email chung từ đĩa nhưng tuần tự hóa nó bằng cách sử dụng cài đặt SMTP tiêu chuẩn khi gửi nó đến máy chủ email.
Gói email cố gắng hết sức để ẩn thông tin chi tiết về các RFC quản lý khác nhau khỏi ứng dụng. Về mặt khái niệm, ứng dụng sẽ có thể xử lý thư email như một cây có cấu trúc gồm văn bản unicode và tệp đính kèm nhị phân mà không phải lo lắng về cách chúng được thể hiện khi được tuần tự hóa. Tuy nhiên, trong thực tế, thường cần phải biết ít nhất một số quy tắc chi phối các thông báo MIME và cấu trúc của chúng, cụ thể là tên và bản chất của "các loại nội dung" MIME và cách chúng xác định các tài liệu nhiều phần. Đối với hầu hết các phần, kiến thức này chỉ nên được yêu cầu cho các ứng dụng phức tạp hơn và thậm chí khi đó nó chỉ nên là cấu trúc cấp cao được đề cập chứ không phải chi tiết về cách các cấu trúc đó được biểu diễn. Vì các loại nội dung MIME được sử dụng rộng rãi trong các phần mềm internet hiện đại (không chỉ email) nên đây sẽ là khái niệm quen thuộc với nhiều lập trình viên.
Các phần sau đây mô tả chức năng của gói email. Chúng ta bắt đầu với mô hình đối tượng message, đây là giao diện chính mà ứng dụng sẽ sử dụng và tiếp theo là các thành phần parser và generator. Sau đó, chúng tôi đề cập đến các điều khiển policy, công cụ này hoàn tất việc xử lý các thành phần chính của thư viện.
Ba phần tiếp theo đề cập đến các trường hợp ngoại lệ mà gói có thể nêu ra và các khiếm khuyết (không tuân thủ RFC) mà parser có thể phát hiện. Sau đó, chúng tôi đề cập đến các thành phần phụ headerregistry và contentmanager, cung cấp các công cụ để thực hiện thao tác chi tiết hơn về tiêu đề và tải trọng tương ứng. Cả hai thành phần này đều chứa các tính năng liên quan đến việc tiêu thụ và tạo ra các thông báo không tầm thường, nhưng cũng ghi lại các API có khả năng mở rộng của chúng, điều này sẽ được các ứng dụng nâng cao quan tâm.
Sau đây là tập hợp các ví dụ về cách sử dụng các phần cơ bản của API được đề cập trong các phần trước.
Những điều trên thể hiện API hiện đại (thân thiện với unicode) của gói email. Các phần còn lại, bắt đầu với lớp Message, bao gồm compat32 API cũ đề cập trực tiếp hơn nhiều đến các chi tiết về cách thể hiện các thông điệp email. compat32 API not ẩn các chi tiết của RFC khỏi ứng dụng, nhưng đối với các ứng dụng cần hoạt động ở cấp độ đó, chúng có thể là công cụ hữu ích. Tài liệu này cũng phù hợp với các ứng dụng vẫn đang sử dụng compat32 API vì lý do tương thích ngược.
Thay đổi trong phiên bản 3.6: Tài liệu được sắp xếp lại và viết lại để quảng cáo EmailMessage/EmailPolicy API mới.
Nội dung của tài liệu gói email:
email.message: Đại diện cho một tin nhắn emailemail.parser: Phân tích tin nhắn emailemail.generator: Tạo tài liệu MIMEemail.policy: Đối tượng chính sáchemail.errors: Các lớp ngoại lệ và khiếm khuyếtemail.headerregistry: Đối tượng tiêu đề tùy chỉnhemail.contentmanager: Quản lý nội dung MIMEemail: Ví dụ
API kế thừa:
Xem thêm