email.policy: Đối tượng chính sách¶
Added in version 3.3.
Source code: Lib/email/policy.py
Trọng tâm chính của gói email là xử lý các email như được mô tả bởi các RFC email và MIME khác nhau. Tuy nhiên, định dạng chung của thư email (một khối trường tiêu đề, mỗi trường bao gồm một tên, theo sau là dấu hai chấm, theo sau là một giá trị, toàn bộ khối theo sau là một dòng trống và một 'nội dung' tùy ý), là một định dạng đã tìm thấy tiện ích bên ngoài lĩnh vực email. Một số cách sử dụng này tuân thủ khá chặt chẽ với RFC email chính, một số thì không. Ngay cả khi làm việc với email, đôi khi bạn muốn phá vỡ sự tuân thủ nghiêm ngặt với RFC, chẳng hạn như tạo email tương tác với các máy chủ email không tuân theo tiêu chuẩn hoặc triển khai các tiện ích mở rộng mà bạn muốn sử dụng theo cách vi phạm tiêu chuẩn.
Các đối tượng chính sách mang lại cho gói email sự linh hoạt để xử lý tất cả các trường hợp sử dụng khác nhau này.
Đối tượng Policy đóng gói một tập hợp các thuộc tính và phương thức kiểm soát hành vi của các thành phần khác nhau của gói email trong quá trình sử dụng. Các phiên bản Policy có thể được chuyển đến nhiều lớp và phương thức khác nhau trong gói email để thay đổi hành vi mặc định. Các giá trị có thể cài đặt và giá trị mặc định của chúng được mô tả dưới đây.
Có một chính sách mặc định được sử dụng bởi tất cả các lớp trong gói email. Đối với tất cả các lớp parser và các hàm tiện lợi liên quan cũng như đối với lớp Message, đây là chính sách Compat32, thông qua phiên bản compat32 được xác định trước tương ứng. Chính sách này cung cấp khả năng tương thích ngược hoàn toàn (trong một số trường hợp, bao gồm cả khả năng tương thích lỗi) với phiên bản tiền Python3.3 của gói email.
Giá trị mặc định này cho từ khóa policy tới EmailMessage là chính sách EmailPolicy, thông qua phiên bản default được xác định trước.
Khi một đối tượng Message hoặc EmailMessage được tạo, nó sẽ nhận được một chính sách. Nếu thông báo được tạo bởi parser thì chính sách được chuyển tới trình phân tích cú pháp sẽ là chính sách được sử dụng bởi thông báo mà nó tạo ra. Nếu thông báo được tạo bởi chương trình thì chính sách có thể được chỉ định khi nó được tạo. Khi một thông báo được chuyển đến generator, trình tạo sẽ sử dụng chính sách từ thông báo theo mặc định, nhưng bạn cũng có thể chuyển một chính sách cụ thể tới trình tạo sẽ ghi đè chính sách được lưu trữ trên đối tượng thông báo.
Giá trị mặc định cho từ khóa policy cho các lớp email.parser và các hàm tiện lợi của trình phân tích cú pháp will be changing trong phiên bản Python trong tương lai. Vì vậy, bạn nên always specify explicitly which policy you want to use khi gọi bất kỳ lớp và hàm nào được mô tả trong mô-đun parser.
Phần đầu tiên của tài liệu này đề cập đến các tính năng của Policy, một abstract base class xác định các tính năng chung cho tất cả các đối tượng chính sách, bao gồm cả compat32. Điều này bao gồm một số phương thức hook nhất định được gói email gọi nội bộ mà chính sách tùy chỉnh có thể ghi đè để có được hành vi khác. Phần thứ hai mô tả các lớp cụ thể EmailPolicy và Compat32, triển khai các hook tương ứng cung cấp hành vi tiêu chuẩn cũng như hành vi và tính năng tương thích ngược.
Các phiên bản Policy là bất biến, nhưng chúng có thể được sao chép, chấp nhận các đối số từ khóa giống như hàm tạo của lớp và trả về một phiên bản Policy mới là bản sao của phiên bản gốc nhưng với các giá trị thuộc tính được chỉ định đã thay đổi.
Ví dụ: đoạn mã sau có thể được sử dụng để đọc thư email từ một tệp trên đĩa và chuyển nó tới chương trình sendmail hệ thống trên hệ thống Unix:
>>> từ nhập email message_from_binary_file
>>> từ email.generator nhập BytesGenerator
>>> từ chính sách nhập email
>>> từ nhập quy trình con Popen, PIPE
>>> với open('mymsg.txt', 'rb') là f:
... tin nhắn = message_from_binary_file(f, Policy=policy.default)
...
>>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)
>>> g = BytesGenerator(p.stdin, Policy=msg.policy.clone(linesep='\r\n'))
>>> g.flatten(tin nhắn)
>>> p.stdin.close()
>>> rc = p.wait()
Ở đây chúng tôi yêu cầu BytesGenerator sử dụng các ký tự phân tách dòng chính xác RFC khi tạo chuỗi nhị phân để nạp vào sendmail's stdin, trong đó chính sách mặc định sẽ sử dụng các ký tự phân tách dòng \n.
Một số phương thức gói email chấp nhận đối số từ khóa policy, cho phép ghi đè chính sách cho phương thức đó. Ví dụ: đoạn mã sau sử dụng phương thức as_bytes() của đối tượng msg từ ví dụ trước và ghi thông báo vào một tệp bằng cách sử dụng dấu phân cách dòng gốc cho nền tảng mà nó đang chạy:
>>> nhập hệ điều hành
>>> với open('converted.txt', 'wb') là f:
... f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))
17
Các đối tượng chính sách cũng có thể được kết hợp bằng cách sử dụng toán tử cộng, tạo ra một đối tượng chính sách có cài đặt là sự kết hợp các giá trị không mặc định của các đối tượng được tính tổng:
>>> compat_SMTP = Policy.compat32.clone(linesep='\r\n')
>>> compat_strict = Policy.compat32.clone(raise_on_defect=True)
>>> compat_strict_SMTP = compat_SMTP + compat_strict
Hoạt động này không giao hoán; nghĩa là thứ tự các đối tượng được thêm vào rất quan trọng. Để minh họa:
>>> chính sách100 = chính sách.compat32.clone(max_line_length=100)
>>> chính sách80 = chính sách.compat32.clone(max_line_length=80)
>>> chính sách = chính sách100 + chính sách80
>>> apolicy.max_line_length
80
>>> chính sách = chính sách80 + chính sách100
>>> apolicy.max_line_length
100
- class email.policy.Policy(**kw)¶
Đây là abstract base class cho tất cả các lớp chính sách. Nó cung cấp các cách triển khai mặc định cho một số phương thức tầm thường, cũng như việc triển khai thuộc tính bất biến, phương thức
clone()và ngữ nghĩa của hàm tạo.Hàm tạo của một lớp chính sách có thể được truyền các đối số từ khóa khác nhau. Các đối số có thể được chỉ định là bất kỳ thuộc tính phi phương thức nào trên lớp này, cộng với mọi thuộc tính phi phương thức bổ sung trên lớp cụ thể. Giá trị được chỉ định trong hàm tạo sẽ ghi đè giá trị mặc định cho thuộc tính tương ứng.
Lớp này xác định các thuộc tính sau và do đó các giá trị cho các thuộc tính sau có thể được truyền vào hàm tạo của bất kỳ lớp chính sách nào:
- max_line_length¶
Độ dài tối đa của bất kỳ dòng nào trong đầu ra được tuần tự hóa, không tính (các) ký tự cuối dòng. Mặc định là 78, trên RFC 5322. Giá trị
0hoặcNonechỉ ra rằng không nên thực hiện ngắt dòng nào cả.
- linesep¶
Chuỗi được sử dụng để kết thúc các dòng trong đầu ra được tuần tự hóa. Mặc định là
\nvì đó là kỷ luật cuối dòng nội bộ được Python sử dụng, mặc dù RFC yêu cầu\r\n.
- cte_type¶
Kiểm soát loại Mã hóa truyền nội dung có thể được hoặc bắt buộc phải sử dụng. Các giá trị có thể là:
7bittất cả dữ liệu phải "sạch 7 bit" (chỉ dành cho ASCII). Điều này có nghĩa là khi dữ liệu cần thiết sẽ được mã hóa bằng cách sử dụng mã hóa có thể in được trích dẫn hoặc mã hóa base64.
8bitdữ liệu không bị hạn chế ở mức sạch 7 bit. Dữ liệu trong tiêu đề vẫn bắt buộc phải chỉ dành cho ASCII và do đó sẽ được mã hóa (xem
fold_binary()vàutf8bên dưới để biết các trường hợp ngoại lệ), nhưng các bộ phận nội dung có thể sử dụng8bitCTE.Giá trị
cte_typecủa8bitchỉ hoạt động vớiBytesGeneratorchứ không phảiGeneratorvì chuỗi không thể chứa dữ liệu nhị phân. NếuGeneratorđang hoạt động theo chính sách chỉ địnhcte_type=8bitthì nó sẽ hoạt động như thểcte_typelà7bit.
- raise_on_defect¶
Nếu là
True, mọi khiếm khuyết gặp phải sẽ được coi là lỗi. NếuFalse(mặc định), lỗi sẽ được chuyển sang phương thứcregister_defect().
- mangle_from_¶
Nếu
True, các dòng bắt đầu bằng "From " trong nội dung sẽ được thoát bằng cách đặt>ở phía trước chúng. Tham số này được sử dụng khi thông báo đang được tuần tự hóa bởi một trình tạo. Mặc định:False.Added in version 3.5.
- message_factory¶
Một hàm xuất xưởng để xây dựng một đối tượng tin nhắn trống mới. Được sử dụng bởi trình phân tích cú pháp khi xây dựng thông báo. Mặc định là
None, trong trường hợp đóMessageđược sử dụng.Added in version 3.6.
- verify_generated_headers¶
Nếu
True(mặc định), trình tạo sẽ tăngHeaderWriteErrorthay vì viết một tiêu đề được gấp hoặc phân cách không đúng cách, do đó nó sẽ được phân tích cú pháp thành nhiều tiêu đề hoặc nối với dữ liệu liền kề. Các tiêu đề như vậy có thể được tạo bởi các lớp tiêu đề tùy chỉnh hoặc lỗi trong mô-đunemail.Vì đây là một tính năng bảo mật nên giá trị mặc định này là
Truengay cả trong chính sáchCompat32. Đối với hành vi tương thích ngược nhưng không an toàn, nó phải được đặt rõ ràng thànhFalse.Added in version 3.13.
Phương thức
Policysau đây được dùng để gọi bằng mã bằng thư viện email để tạo các phiên bản chính sách với cài đặt tùy chỉnh:- clone(**kw)¶
Trả về một phiên bản
Policymới có các thuộc tính có cùng giá trị với phiên bản hiện tại, ngoại trừ khi các thuộc tính đó được các đối số từ khóa cung cấp các giá trị mới.
Các phương thức
Policycòn lại được gọi bằng mã gói email và không nhằm mục đích được gọi bởi một ứng dụng sử dụng gói email. Chính sách tùy chỉnh phải triển khai tất cả các phương pháp này.- handle_defect(obj, defect)¶
Xử lý defect được tìm thấy trên obj. Khi gói email gọi phương thức này, defect sẽ luôn là lớp con của
MessageDefect.Việc triển khai mặc định sẽ kiểm tra cờ
raise_on_defect. Nếu làTruethì defect sẽ được coi là ngoại lệ. Nếu làFalse(mặc định), obj và defect được chuyển tớiregister_defect().
- register_defect(obj, defect)¶
Đăng ký defect trên obj. Trong gói email, defect sẽ luôn là lớp con của
MessageDefect.Việc triển khai mặc định gọi phương thức
appendcủa thuộc tínhdefectscủa obj. Khi gói email gọihandle_defect, obj thường sẽ có thuộc tínhdefectscó phương thứcappend. Các loại đối tượng tùy chỉnh được sử dụng với gói email (ví dụ: đối tượngMessagetùy chỉnh) cũng phải cung cấp thuộc tính như vậy, nếu không các lỗi trong thư được phân tích cú pháp sẽ gây ra lỗi không mong muốn.
- header_max_count(name)¶
Trả về số lượng tiêu đề tối đa được phép có tên name.
Được gọi khi tiêu đề được thêm vào đối tượng
EmailMessagehoặcMessage. Nếu giá trị được trả về không phải là0hoặcNonevà đã có một số tiêu đề có tên name lớn hơn hoặc bằng giá trị được trả về thìValueErrorsẽ được nâng lên.Vì hành vi mặc định của
Message.__setitem__là thêm giá trị vào danh sách các tiêu đề nên rất dễ tạo các tiêu đề trùng lặp mà không nhận ra. Phương pháp này cho phép giới hạn một số tiêu đề nhất định về số lượng phiên bản của tiêu đề đó có thể được thêm vàoMessagetheo chương trình. (Trình phân tích cú pháp không tuân thủ giới hạn này, điều này sẽ tạo ra một cách trung thực số lượng tiêu đề tồn tại trong thông báo được phân tích cú pháp.)Việc triển khai mặc định trả về
Nonecho tất cả các tên tiêu đề.
- header_source_parse(sourcelines)¶
Gói email gọi phương thức này bằng một danh sách các chuỗi, mỗi chuỗi kết thúc bằng các ký tự phân tách dòng được tìm thấy trong nguồn được phân tích cú pháp. Dòng đầu tiên bao gồm tên tiêu đề trường và dấu phân cách. Tất cả khoảng trắng trong nguồn được giữ nguyên. Phương thức này sẽ trả về bộ dữ liệu
(name, value)sẽ được lưu trữ trongMessageđể thể hiện tiêu đề được phân tích cú pháp.Nếu việc triển khai muốn duy trì khả năng tương thích với các chính sách gói email hiện có thì name phải là tên được giữ nguyên kiểu chữ (tất cả các ký tự cho đến dấu phân cách '
:'), trong khi value phải là giá trị chưa được mở rộng (đã loại bỏ tất cả các ký tự phân tách dòng nhưng vẫn giữ nguyên khoảng trắng), loại bỏ khoảng trắng ở đầu.sourcelines có thể chứa dữ liệu nhị phân thay thế.
Không có triển khai mặc định
- header_store_parse(name, value)¶
Gói email gọi phương thức này bằng tên và giá trị do chương trình ứng dụng cung cấp khi chương trình ứng dụng đang sửa đổi
Messagetheo chương trình (ngược lại vớiMessageđược tạo bởi trình phân tích cú pháp). Phương thức này sẽ trả về bộ dữ liệu(name, value)sẽ được lưu trữ trongMessageđể thể hiện tiêu đề.Nếu việc triển khai muốn duy trì khả năng tương thích với các chính sách gói email hiện có thì name và value phải là các chuỗi hoặc các lớp con chuỗi không thay đổi nội dung của các đối số được truyền vào.
Không có triển khai mặc định
- header_fetch_parse(name, value)¶
Gói email gọi phương thức này với name và value hiện được lưu trữ trong
Messagekhi tiêu đề đó được chương trình ứng dụng yêu cầu và bất cứ điều gì phương thức trả về đều là những gì được truyền lại cho ứng dụng dưới dạng giá trị của tiêu đề được truy xuất. Lưu ý rằng có thể có nhiều tiêu đề có cùng tên được lưu trongMessage; phương thức được truyền tên và giá trị cụ thể của tiêu đề sẽ được trả về cho ứng dụng.value có thể chứa dữ liệu nhị phân thay thế. Không được có dữ liệu nhị phân thay thế trong giá trị được phương thức trả về.
Không có triển khai mặc định
- fold(name, value)¶
Gói email gọi phương thức này với name và value hiện được lưu trữ trong
Messagecho một tiêu đề nhất định. Phương thức này sẽ trả về một chuỗi biểu thị tiêu đề đó được "gấp" một cách chính xác (theo cài đặt chính sách) bằng cách kết hợp name với value và chèn các ký tựlinesepvào những vị trí thích hợp. Xem RFC 5322 để biết phần thảo luận về các quy tắc gấp tiêu đề email.value có thể chứa dữ liệu nhị phân thay thế. Không được có dữ liệu nhị phân thay thế trong chuỗi được phương thức trả về.
- class email.policy.EmailPolicy(**kw)¶
Policycụ thể này cung cấp hành vi nhằm mục đích tuân thủ đầy đủ các RFC email hiện tại. Chúng bao gồm (nhưng không giới hạn) RFC 5322, RFC 2047 và RFC MIME hiện tại.Chính sách này bổ sung các thuật toán phân tích cú pháp và sắp xếp tiêu đề mới. Thay vì các chuỗi đơn giản, các tiêu đề là các lớp con
strvới các thuộc tính phụ thuộc vào loại trường. Thuật toán phân tích cú pháp và gấp thực hiện đầy đủ RFC 2047 và RFC 5322.Giá trị mặc định cho thuộc tính
message_factorylàEmailMessage.Ngoài các thuộc tính có thể cài đặt được liệt kê ở trên áp dụng cho tất cả các chính sách, chính sách này còn bổ sung các thuộc tính bổ sung sau:
Added in version 3.6: [1]
- utf8¶
Nếu
False, hãy làm theo RFC 5322, hỗ trợ các ký tự không phải ASCII trong tiêu đề bằng cách mã hóa chúng thành "các từ được mã hóa". NếuTrue, hãy làm theo RFC 6532 và sử dụng mã hóautf-8cho tiêu đề. Tin nhắn được định dạng theo cách này có thể được chuyển đến máy chủ SMTP hỗ trợ tiện ích mở rộngSMTPUTF8(RFC 6531).
- refold_source¶
Nếu giá trị cho tiêu đề trong đối tượng
Messagecó nguồn gốc từparser(ngược lại với việc được đặt bởi một chương trình), thuộc tính này cho biết liệu trình tạo có nên gửi lại giá trị đó hay không khi chuyển đổi thông báo trở lại dạng tuần tự hóa. Các giá trị có thể là:nonetất cả các giá trị nguồn đều sử dụng cách gấp ban đầu
longcác giá trị nguồn có bất kỳ dòng nào dài hơn
max_line_lengthsẽ được bán lạialltất cả các giá trị được bán lại.
Mặc định là
long.
- header_factory¶
Một lệnh gọi có hai đối số,
namevàvalue, trong đónamelà tên trường tiêu đề vàvaluelà giá trị trường tiêu đề chưa được mở và trả về một lớp con chuỗi đại diện cho tiêu đề đó. Mộtheader_factorymặc định (xemheaderregistry) được cung cấp để hỗ trợ phân tích cú pháp tùy chỉnh cho các loại trường tiêu đề RFC 5322 địa chỉ và ngày khác nhau cũng như các loại trường tiêu đề MIME chính. Hỗ trợ phân tích cú pháp tùy chỉnh bổ sung sẽ được thêm vào trong tương lai.
- content_manager¶
Một đối tượng có ít nhất hai phương thức: get_content và set_content. Khi phương thức
get_content()hoặcset_content()của đối tượngEmailMessageđược gọi, nó sẽ gọi phương thức tương ứng của đối tượng này, chuyển đối tượng thông báo làm đối số đầu tiên và bất kỳ đối số hoặc từ khóa nào được truyền cho nó dưới dạng đối số bổ sung. Theo mặc định,content_managerđược đặt thànhraw_data_manager.Added in version 3.4.
Lớp này cung cấp các cách triển khai cụ thể sau đây của các phương thức trừu tượng của
Policy:- header_max_count(name)¶
Trả về giá trị của thuộc tính
max_countcủa lớp chuyên biệt được sử dụng để thể hiện tiêu đề với tên đã cho.
- header_source_parse(sourcelines)¶
Tên được phân tích cú pháp dưới dạng mọi thứ cho đến '
:' và được trả về chưa sửa đổi. Giá trị được xác định bằng cách loại bỏ khoảng trắng ở đầu phần còn lại của dòng đầu tiên, nối tất cả các dòng tiếp theo lại với nhau và loại bỏ mọi ký tự xuống dòng hoặc ký tự nguồn cấp dữ liệu ở cuối.
- header_store_parse(name, value)¶
Tên được trả về không thay đổi. Nếu giá trị đầu vào có thuộc tính
namevà nó khớp với trường hợp bỏ qua name thì giá trị được trả về không thay đổi. Nếu không, name và value sẽ được chuyển đếnheader_factoryvà đối tượng tiêu đề kết quả sẽ được trả về dưới dạng giá trị. Trong trường hợp này,ValueErrorđược tăng lên nếu giá trị đầu vào chứa ký tự CR hoặc LF.
- header_fetch_parse(name, value)¶
Nếu giá trị có thuộc tính
name, nó sẽ được trả về trạng thái chưa sửa đổi. Mặt khác, name và value với bất kỳ ký tự CR hoặc LF nào bị loại bỏ, sẽ được chuyển đếnheader_factoryvà đối tượng tiêu đề kết quả sẽ được trả về. Bất kỳ byte được thay thế nào sẽ được chuyển thành glyph ký tự không xác định unicode.
- fold(name, value)¶
Việc gấp tiêu đề được kiểm soát bởi cài đặt chính sách
refold_source. Một giá trị được coi là 'giá trị nguồn' khi và chỉ khi nó không có thuộc tínhname(có thuộc tínhnamecó nghĩa là nó là một đối tượng tiêu đề thuộc loại nào đó). Nếu một giá trị nguồn cần được sắp xếp lại theo chính sách thì giá trị đó sẽ được chuyển đổi thành đối tượng tiêu đề bằng cách chuyển name và value với bất kỳ ký tự CR và LF nào bị xóa sangheader_factory. Việc gấp đối tượng tiêu đề được thực hiện bằng cách gọi phương thứcfoldcủa nó với chính sách hiện tại.Giá trị nguồn được chia thành các dòng bằng
splitlines(). Nếu giá trị không được gấp lại thì các dòng sẽ được nối lại bằnglineseptừ chính sách và được trả về. Ngoại lệ là các dòng chứa dữ liệu nhị phân không phải mã ascii. Trong trường hợp đó, giá trị được bán lại bất kể cài đặtrefold_source, điều này khiến dữ liệu nhị phân được mã hóa CTE bằng bộ ký tựunknown-8bit.
- fold_binary(name, value)¶
Tương tự như
fold()nếucte_typelà7bit, ngoại trừ giá trị trả về là byte.Nếu
cte_typelà8bit, dữ liệu nhị phân không phải ASCII sẽ được chuyển đổi trở lại thành byte. Các tiêu đề có dữ liệu nhị phân không được sắp xếp lại, bất kể cài đặtrefold_header, vì không có cách nào để biết liệu dữ liệu nhị phân bao gồm các ký tự byte đơn hay ký tự nhiều byte.
Các phiên bản EmailPolicy sau đây cung cấp các giá trị mặc định phù hợp với các miền ứng dụng cụ thể. Lưu ý rằng trong tương lai, hành vi của các phiên bản này (đặc biệt là phiên bản HTTP) có thể được điều chỉnh để tuân thủ chặt chẽ hơn nữa với các RFC liên quan đến miền của chúng.
- email.policy.default¶
Một phiên bản của
EmailPolicyvới tất cả các giá trị mặc định không thay đổi. Chính sách này sử dụng các kết thúc dòng\ntiêu chuẩn của Python thay vì\r\nđúng với RFC.
- email.policy.SMTP¶
Thích hợp để tuần tự hóa các tin nhắn phù hợp với RFC của email. Giống như
default, nhưng vớilinesepđược đặt thành\r\n, tương thích với RFC.
- email.policy.SMTPUTF8¶
Giống như
SMTPngoại trừutf8làTrue. Hữu ích cho việc sắp xếp các tin nhắn vào kho lưu trữ tin nhắn mà không sử dụng các từ được mã hóa trong tiêu đề. Chỉ nên sử dụng để truyền SMTP nếu địa chỉ người gửi hoặc người nhận có các ký tự không phải ASCII (phương thứcsmtplib.SMTP.send_message()tự động xử lý việc này).
- email.policy.HTTP¶
Thích hợp để tuần tự hóa các tiêu đề để sử dụng trong lưu lượng truy cập HTTP. Giống như
SMTPngoại trừmax_line_lengthđược đặt thànhNone(không giới hạn).
- email.policy.strict¶
Ví dụ thuận tiện. Giống như
defaultngoại trừraise_on_defectđược đặt thànhTrue. Điều này cho phép mọi chính sách được thực hiện nghiêm ngặt bằng cách viết:một số chính sách + chính sách.strict
Với tất cả EmailPolicies này, API hiệu quả của gói email được thay đổi từ Python 3.2 API theo những cách sau:
Đặt tiêu đề trên
Messagedẫn đến tiêu đề đó được phân tích cú pháp và đối tượng tiêu đề được tạo.Việc tìm nạp giá trị tiêu đề từ
Messagedẫn đến tiêu đề đó được phân tích cú pháp và đối tượng tiêu đề được tạo và trả về.Bất kỳ đối tượng tiêu đề nào hoặc bất kỳ tiêu đề nào được sắp xếp lại do cài đặt chính sách đều được sắp xếp lại bằng cách sử dụng thuật toán triển khai đầy đủ thuật toán gấp RFC, bao gồm cả việc biết các từ được mã hóa được yêu cầu và cho phép ở đâu.
Từ chế độ xem ứng dụng, điều này có nghĩa là mọi tiêu đề thu được thông qua EmailMessage đều là đối tượng tiêu đề có các thuộc tính bổ sung, có giá trị chuỗi là giá trị unicode được giải mã hoàn toàn của tiêu đề. Tương tự, tiêu đề có thể được gán một giá trị mới hoặc tiêu đề mới được tạo bằng cách sử dụng chuỗi unicode và chính sách sẽ đảm nhiệm việc chuyển đổi chuỗi unicode thành dạng được mã hóa RFC chính xác.
Các đối tượng tiêu đề và thuộc tính của chúng được mô tả trong headerregistry.
- class email.policy.Compat32(**kw)¶
Policycụ thể này là chính sách tương thích ngược. Nó sao chép hành vi của gói email trong Python 3.2. Mô-đunpolicycũng định nghĩa một thể hiện của lớp này,compat32, được sử dụng làm chính sách mặc định. Do đó, hành vi mặc định của gói email là duy trì khả năng tương thích với Python 3.2.Các thuộc tính sau có giá trị khác với giá trị mặc định của
Policy:- mangle_from_¶
Mặc định là
True.
Lớp này cung cấp các cách triển khai cụ thể sau đây của các phương thức trừu tượng của
Policy:- header_source_parse(sourcelines)¶
Tên được phân tích cú pháp dưới dạng mọi thứ cho đến '
:' và được trả về chưa sửa đổi. Giá trị được xác định bằng cách loại bỏ khoảng trắng ở đầu phần còn lại của dòng đầu tiên, nối tất cả các dòng tiếp theo lại với nhau và loại bỏ mọi ký tự xuống dòng hoặc ký tự nguồn cấp dữ liệu ở cuối.
- header_store_parse(name, value)¶
Tên và giá trị được trả về không thay đổi.
- header_fetch_parse(name, value)¶
Nếu giá trị chứa dữ liệu nhị phân, nó sẽ được chuyển đổi thành đối tượng
Headerbằng bộ ký tựunknown-8bit. Nếu không nó sẽ được trả về không sửa đổi.
- fold(name, value)¶
Các tiêu đề được gấp bằng thuật toán gấp
Header, thuật toán này giữ nguyên các ngắt dòng hiện có trong giá trị và gói từng dòng kết quả vàomax_line_length. Dữ liệu nhị phân không phải ASCII được mã hóa CTE bằng bộ ký tựunknown-8bit.
- fold_binary(name, value)¶
Các tiêu đề được gấp bằng thuật toán gấp
Header, thuật toán này giữ nguyên các ngắt dòng hiện có trong giá trị và gói từng dòng kết quả vàomax_line_length. Nếucte_typelà7bit, dữ liệu nhị phân không phải mã ascii sẽ được mã hóa CTE bằng bộ ký tựunknown-8bit. Mặt khác, tiêu đề nguồn ban đầu sẽ được sử dụng, cùng với các ngắt dòng hiện có và bất kỳ dữ liệu nhị phân nào (RFC không hợp lệ) mà nó có thể chứa.
- email.policy.compat32¶
Một phiên bản của
Compat32, cung cấp khả năng tương thích ngược với hoạt động của gói email trong Python 3.2.Ghi chú
Không nên sử dụng chính sách
compat32làm chính sách cho các đối tượngEmailMessagevà chỉ nên sử dụng để tuần tự hóa các tin nhắn được tạo bằng chính sáchcompat32.
Chú thích cuối trang