email.message: Đại diện cho một tin nhắn email¶
Source code: Lib/email/message.py
Added in version 3.6: [1]
Lớp trung tâm trong gói email là lớp EmailMessage, được nhập từ mô-đun email.message. Nó là lớp cơ sở cho mô hình đối tượng email. EmailMessage cung cấp chức năng cốt lõi để cài đặt và truy vấn các trường tiêu đề, để truy cập nội dung thư cũng như để tạo hoặc sửa đổi các tin nhắn có cấu trúc.
Một email bao gồm headers và payload (còn được gọi là content). Tiêu đề là tên và giá trị trường kiểu RFC 5322 hoặc RFC 6532, trong đó tên và giá trị trường được phân tách bằng dấu hai chấm. Dấu hai chấm không phải là một phần của tên trường hoặc giá trị trường. Tải trọng có thể là một tin nhắn văn bản đơn giản hoặc một đối tượng nhị phân hoặc một chuỗi các tin nhắn phụ có cấu trúc, mỗi tin nhắn có bộ tiêu đề và tải trọng riêng. Loại tải trọng thứ hai được biểu thị bằng thông báo có loại MIME như multipart/* hoặc message/rfc822.
Mô hình khái niệm được cung cấp bởi đối tượng EmailMessage là mô hình từ điển có thứ tự các tiêu đề được ghép nối với payload đại diện cho phần thân RFC 5322 của thông báo, có thể là danh sách các đối tượng phụ-EmailMessage. Ngoài các phương pháp từ điển thông thường để truy cập tên và giá trị tiêu đề, còn có các phương pháp truy cập thông tin chuyên biệt từ các tiêu đề (ví dụ: loại nội dung MIME), để vận hành trên tải trọng, để tạo phiên bản tuần tự của thông báo và để duyệt đệ quy trên cây đối tượng.
Giao diện giống từ điển EmailMessage được lập chỉ mục theo tên tiêu đề, phải là giá trị ASCII. Các giá trị của từ điển là các chuỗi có một số phương thức bổ sung. Các tiêu đề được lưu trữ và trả về ở dạng bảo toàn chữ hoa chữ thường, nhưng tên trường được khớp không phân biệt chữ hoa chữ thường. Các khóa được sắp xếp theo thứ tự, nhưng không giống như một lệnh thực sự, có thể có các bản sao. Các phương pháp bổ sung được cung cấp để làm việc với các tiêu đề có khóa trùng lặp.
payload là một đối tượng chuỗi hoặc byte, trong trường hợp các đối tượng thông báo đơn giản hoặc một danh sách các đối tượng EmailMessage, cho các tài liệu chứa MIME như các đối tượng thông báo multipart/* và message/rfc822.
- class email.message.EmailMessage(policy=default)¶
Nếu policy được chỉ định, hãy sử dụng các quy tắc mà nó chỉ định để cập nhật và tuần tự hóa cách trình bày thông báo. Nếu policy không được đặt, hãy sử dụng chính sách
default, tuân theo các quy tắc của RFC email ngoại trừ phần cuối dòng (thay vì RFC bắt buộc\r\n, chính sách này sử dụng các phần cuối dòng\ntiêu chuẩn Python). Để biết thêm thông tin, hãy xem tài liệupolicy. [2]- as_string(unixfrom=False, maxheaderlen=None, policy=None)¶
Trả lại toàn bộ tin nhắn được làm phẳng dưới dạng một chuỗi. Khi unixfrom tùy chọn là đúng, tiêu đề phong bì sẽ được bao gồm trong chuỗi trả về. unixfrom mặc định là
False. Để tương thích ngược với lớpMessagecơ sở, maxheaderlen được chấp nhận nhưng mặc định làNone, có nghĩa là theo mặc định, độ dài dòng được kiểm soát bởimax_line_lengthcủa chính sách. Đối số policy có thể được sử dụng để ghi đè chính sách mặc định thu được từ phiên bản thông báo. Điều này có thể được sử dụng để kiểm soát một số định dạng do phương thức tạo ra, vì policy được chỉ định sẽ được chuyển tớiGenerator.Việc làm phẳng thông báo có thể kích hoạt các thay đổi đối với
EmailMessagenếu cần điền các giá trị mặc định để hoàn tất quá trình chuyển đổi thành chuỗi (ví dụ: ranh giới MIME có thể được tạo hoặc sửa đổi).Lưu ý rằng phương pháp này được cung cấp để thuận tiện và có thể không phải là cách hữu ích nhất để tuần tự hóa các tin nhắn trong ứng dụng của bạn, đặc biệt nếu bạn đang xử lý nhiều tin nhắn. Xem
email.generator.Generatorđể biết API linh hoạt hơn cho việc sắp xếp các tin nhắn theo thứ tự. Cũng lưu ý rằng phương pháp này bị hạn chế trong việc tạo ra các thông báo được tuần tự hóa là "sạch 7 bit" khiutf8làFalse, đây là mặc định.Thay đổi trong phiên bản 3.6: hành vi mặc định khi maxheaderlen không được chỉ định đã được thay đổi từ mặc định thành 0 thành mặc định thành giá trị max_line_length từ chính sách.
- __str__()¶
Tương đương với
as_string(policy=self.policy.clone(utf8=True)). Cho phépstr(msg)tạo chuỗi chứa tin nhắn được tuần tự hóa ở định dạng có thể đọc được.Thay đổi trong phiên bản 3.4: phương thức đã được thay đổi để sử dụng
utf8=True, do đó tạo ra cách trình bày thông báo giống RFC 6531, thay vì là bí danh trực tiếp choas_string().
- as_bytes(unixfrom=False, policy=None)¶
Trả về toàn bộ tin nhắn được làm phẳng dưới dạng đối tượng byte. Khi unixfrom tùy chọn là đúng, tiêu đề phong bì sẽ được bao gồm trong chuỗi trả về. unixfrom mặc định là
False. Đối số policy có thể được sử dụng để ghi đè chính sách mặc định thu được từ phiên bản thông báo. Điều này có thể được sử dụng để kiểm soát một số định dạng do phương thức tạo ra, vì policy được chỉ định sẽ được chuyển tớiBytesGenerator.Việc làm phẳng thông báo có thể kích hoạt các thay đổi đối với
EmailMessagenếu cần điền các giá trị mặc định để hoàn tất quá trình chuyển đổi thành chuỗi (ví dụ: ranh giới MIME có thể được tạo hoặc sửa đổi).Lưu ý rằng phương pháp này được cung cấp để thuận tiện và có thể không phải là cách hữu ích nhất để tuần tự hóa các tin nhắn trong ứng dụng của bạn, đặc biệt nếu bạn đang xử lý nhiều tin nhắn. Xem
email.generator.BytesGeneratorđể biết API linh hoạt hơn cho việc sắp xếp các tin nhắn theo thứ tự.
- __bytes__()¶
Tương đương với
as_bytes(). Cho phépbytes(msg)tạo đối tượng byte chứa thông báo được tuần tự hóa.
- is_multipart()¶
Trả về
Truenếu tải trọng của tin nhắn là danh sách các đối tượng phụ:class:EmailMessage, nếu không thì trả vềFalse. Khiis_multipart()trả vềFalse, tải trọng phải là một đối tượng chuỗi (có thể là tải trọng nhị phân được mã hóa CTE). Lưu ý rằngis_multipart()trả vềTruekhông nhất thiết có nghĩa là "msg.get_content_maintype() == 'multipart'" sẽ trả vềTrue. Ví dụ:is_multipartsẽ trả vềTruekhiEmailMessagethuộc loạimessage/rfc822.
- set_unixfrom(unixfrom)¶
Đặt tiêu đề phong bì của thư thành unixfrom, tiêu đề này phải là một chuỗi. (Xem
mboxMessageđể biết mô tả ngắn gọn về tiêu đề này.)
- get_unixfrom()¶
Trả lại tiêu đề phong bì của tin nhắn. Mặc định là
Nonenếu tiêu đề phong bì chưa bao giờ được đặt.
Các phương pháp sau đây triển khai giao diện giống như ánh xạ để truy cập vào tiêu đề của thư. Lưu ý rằng có một số khác biệt về ngữ nghĩa giữa các phương thức này và giao diện ánh xạ (tức là từ điển) thông thường. Ví dụ: trong từ điển không có khóa trùng lặp nhưng ở đây có thể có tiêu đề thư trùng lặp. Ngoài ra, trong từ điển không có thứ tự đảm bảo cho các khóa được trả về bởi
keys(), nhưng trong đối tượngEmailMessage, các tiêu đề luôn được trả về theo thứ tự chúng xuất hiện trong thư gốc hoặc theo thứ tự chúng được thêm vào thư sau đó. Bất kỳ tiêu đề nào bị xóa rồi được thêm lại luôn được thêm vào cuối danh sách tiêu đề.Những khác biệt về ngữ nghĩa này là có chủ ý và thiên về sự thuận tiện trong các trường hợp sử dụng phổ biến nhất.
Lưu ý rằng trong mọi trường hợp, mọi tiêu đề phong bì có trong tin nhắn đều không được đưa vào giao diện ánh xạ.
- __len__()¶
Trả về tổng số tiêu đề, bao gồm cả các tiêu đề trùng lặp.
- __contains__(name)¶
Trả về
Truenếu đối tượng tin nhắn có trường có tên name. Việc so khớp được thực hiện mà không phân biệt chữ hoa chữ thường và name không bao gồm dấu hai chấm ở cuối. Được sử dụng cho toán tửin. Ví dụ:nếu 'id tin nhắn' trong myMessage: print('Message-ID:', myMessage['message-id'])
- __getitem__(name)¶
Trả về giá trị của trường tiêu đề được đặt tên. name không bao gồm dấu phân cách trường dấu hai chấm. Nếu thiếu tiêu đề,
Nonesẽ được trả về; mộtKeyErrorkhông bao giờ được nâng lên.Lưu ý rằng nếu trường được đặt tên xuất hiện nhiều lần trong tiêu đề của thư thì giá trị chính xác của trường nào sẽ được trả về sẽ không được xác định. Sử dụng phương pháp
get_all()để lấy giá trị của tất cả các tiêu đề còn tồn tại có tên name.Sử dụng các chính sách tiêu chuẩn (không phải
compat32), giá trị được trả về là một phiên bản của lớp con củaemail.headerregistry.BaseHeader.
- __setitem__(name, val)¶
Thêm tiêu đề vào tin nhắn với tên trường name và giá trị val. Trường này được thêm vào cuối tiêu đề hiện có của thư.
Lưu ý rằng điều này not ghi đè hoặc xóa bất kỳ tiêu đề hiện có nào có cùng tên. Nếu bạn muốn đảm bảo rằng tiêu đề mới là tiêu đề duy nhất có trong thư có tên trường name, trước tiên hãy xóa trường đó, ví dụ::
del tin nhắn['chủ đề'] msg['subject'] = 'Python roolz!'
Nếu
policyxác định một số tiêu đề nhất định là duy nhất (như các chính sách tiêu chuẩn thực hiện), phương pháp này có thể tạo raValueErrorkhi cố gắng gán giá trị cho tiêu đề đó khi một tiêu đề đã tồn tại. Hành vi này là có chủ ý vì mục đích nhất quán, nhưng không phụ thuộc vào nó vì chúng tôi có thể chọn thực hiện các nhiệm vụ như vậy để tự động xóa tiêu đề hiện có trong tương lai.
- __delitem__(name)¶
Xóa tất cả các lần xuất hiện của trường có tên name khỏi tiêu đề của thư. Không có ngoại lệ nào được đưa ra nếu trường được đặt tên không có trong tiêu đề.
- keys()¶
Trả về danh sách tất cả tên trường tiêu đề của thư.
- values()¶
Trả về danh sách tất cả các giá trị trường của tin nhắn.
- items()¶
Trả về danh sách gồm 2 bộ chứa tất cả các tiêu đề và giá trị trường của thông báo.
- get(name, failobj=None)¶
Trả về giá trị của trường tiêu đề được đặt tên. Điều này giống hệt với
__getitem__()ngoại trừ failobj tùy chọn được trả về nếu thiếu tiêu đề được đặt tên (failobj mặc định làNone).
Dưới đây là một số phương pháp liên quan đến tiêu đề hữu ích bổ sung:
- get_all(name, failobj=None)¶
Trả về danh sách tất cả các giá trị cho trường có tên name. Nếu không có tiêu đề được đặt tên như vậy trong tin nhắn, failobj sẽ được trả về (mặc định là
None).
- add_header(_name, _value, **_params)¶
Cài đặt tiêu đề mở rộng. Phương thức này tương tự như
__setitem__()ngoại trừ các tham số tiêu đề bổ sung có thể được cung cấp làm đối số từ khóa. _name là trường tiêu đề cần thêm và _value là giá trị primary cho tiêu đề.Đối với mỗi mục trong từ điển đối số từ khóa _params, khóa được lấy làm tên tham số, với dấu gạch dưới được chuyển thành dấu gạch ngang (vì dấu gạch ngang là không hợp lệ trong mã định danh Python). Thông thường, tham số sẽ được thêm dưới dạng
key="value"trừ khi giá trị làNone, trong trường hợp đó chỉ có khóa mới được thêm vào.Nếu giá trị chứa các ký tự không phải là ASCII thì bộ ký tự và ngôn ngữ có thể được kiểm soát rõ ràng bằng cách chỉ định giá trị dưới dạng bộ ba ở định dạng
(CHARSET, LANGUAGE, VALUE), trong đóCHARSETlà một chuỗi đặt tên cho bộ ký tự được sử dụng để mã hóa giá trị,LANGUAGEthường có thể được đặt thànhNonehoặc chuỗi trống (xem RFC 2231 để biết các khả năng khác) vàVALUElà giá trị chuỗi chứa không phải ASCII điểm mã. Nếu bộ ba không được chuyển và giá trị chứa các ký tự không phải là ASCII, thì nó sẽ tự động được mã hóa ở định dạng RFC 2231 bằng cách sử dụngCHARSETcủautf-8vàLANGUAGEcủaNone.Đây là một ví dụ:
msg.add_header('Bố trí nội dung', 'tệp đính kèm', filename='bud.gif')
Điều này sẽ thêm một tiêu đề trông giống như
Bố trí nội dung: tệp đính kèm; tên tệp="bud.gif"
Một ví dụ về giao diện mở rộng có các ký tự không phải ASCII:
msg.add_header('Bố trí nội dung', 'tệp đính kèm', filename=('iso-8859-1', '', 'Fußballer.ppt'))
- replace_header(_name, _value)¶
Thay thế một tiêu đề. Thay thế tiêu đề đầu tiên được tìm thấy trong tin nhắn khớp với _name, giữ nguyên thứ tự tiêu đề và kiểu chữ trường của tiêu đề ban đầu. Nếu không tìm thấy tiêu đề phù hợp, hãy tăng
KeyError.
- get_content_type()¶
Trả về kiểu nội dung của tin nhắn, buộc phải viết thường ở dạng maintype/subtype. Nếu không có tiêu đề Content-Type trong tin nhắn, hãy trả về giá trị được
get_default_type()trả về. Nếu tiêu đề Content-Type không hợp lệ, hãy trả vềtext/plain.(Theo RFC 2045, các tin nhắn luôn có loại mặc định,
get_content_type()sẽ luôn trả về một giá trị. RFC 2045 xác định loại mặc định của tin nhắn là text/plain trừ khi nó xuất hiện bên trong vùng chứa multipart/digest, trong trường hợp đó nó sẽ là message/rfc822. Nếu tiêu đề Content-Type có thông số loại không hợp lệ, RFC 2045 bắt buộc loại mặc định là text/plain.)
- get_content_maintype()¶
Trả về loại nội dung chính của tin nhắn. Đây là phần maintype của chuỗi được trả về bởi
get_content_type().
- get_content_subtype()¶
Trả về loại nội dung phụ của tin nhắn. Đây là phần subtype của chuỗi được trả về bởi
get_content_type().
- get_default_type()¶
Trả về loại nội dung mặc định. Hầu hết các tin nhắn đều có loại nội dung mặc định là text/plain, ngoại trừ các tin nhắn là phần phụ của vùng chứa multipart/digest. Các phần con như vậy có loại nội dung mặc định là message/rfc822.
- set_default_type(ctype)¶
Đặt loại nội dung mặc định. ctype phải là text/plain hoặc message/rfc822, mặc dù điều này không được thực thi. Loại nội dung mặc định không được lưu trữ trong tiêu đề Content-Type, vì vậy nó chỉ ảnh hưởng đến giá trị trả về của các phương thức
get_content_typekhi không có tiêu đề Content-Type trong tin nhắn.
- set_param(param, value, header='Content-Type', requote=True, charset=None, language='', replace=False)¶
Đặt tham số trong tiêu đề Content-Type. Nếu tham số đã tồn tại trong tiêu đề, hãy thay thế giá trị của nó bằng value. Khi header là
Content-Type(mặc định) và tiêu đề chưa tồn tại trong tin nhắn, hãy thêm nó, đặt giá trị của nó thành text/plain và thêm giá trị tham số mới. header tùy chọn chỉ định tiêu đề thay thế cho Content-Type.Nếu giá trị chứa các ký tự không phải là ASCII thì bộ ký tự và ngôn ngữ có thể được chỉ định rõ ràng bằng cách sử dụng các tham số charset và language tùy chọn. language tùy chọn chỉ định ngôn ngữ RFC 2231, mặc định là chuỗi trống. Cả charset và language đều phải là chuỗi. Mặc định là sử dụng
utf8charset vàNonecho language.Nếu replace là
False(mặc định) thì tiêu đề sẽ được chuyển đến cuối danh sách các tiêu đề. Nếu replace làTrue, tiêu đề sẽ được cập nhật tại chỗ.Việc sử dụng tham số requote với các đối tượng
EmailMessagekhông được dùng nữa.Lưu ý rằng các giá trị tham số hiện có của tiêu đề có thể được truy cập thông qua thuộc tính
paramscủa giá trị tiêu đề (ví dụ:msg['Content-Type'].params['charset']).Thay đổi trong phiên bản 3.4: Từ khóa
replaceđã được thêm vào.
- del_param(param, header='content-type', requote=True)¶
Xóa hoàn toàn tham số đã cho khỏi tiêu đề Content-Type. Tiêu đề sẽ được viết lại tại chỗ mà không có tham số hoặc giá trị của nó. header tùy chọn chỉ định một giải pháp thay thế cho Content-Type.
Việc sử dụng tham số requote với các đối tượng
EmailMessagekhông được dùng nữa.
- get_filename(failobj=None)¶
Trả về giá trị của tham số
filenamecủa tiêu đề Content-Disposition của tin nhắn. Nếu tiêu đề không có tham sốfilename, phương pháp này sẽ quay lại tìm kiếm tham sốnametrên tiêu đề Content-Type. Nếu không tìm thấy hoặc thiếu tiêu đề thì failobj sẽ được trả về. Chuỗi trả về sẽ luôn không được trích dẫn theoemail.utils.unquote().
- get_boundary(failobj=None)¶
Trả về giá trị của tham số
boundarycủa tiêu đề Content-Type của tin nhắn hoặc failobj nếu tiêu đề bị thiếu hoặc không có tham sốboundary. Chuỗi trả về sẽ luôn không được trích dẫn theoemail.utils.unquote().
- set_boundary(boundary)¶
Đặt tham số
boundarycủa tiêu đề Content-Type thành boundary.set_boundary()sẽ luôn trích dẫn boundary nếu cần thiết. MộtHeaderParseErrorđược nâng lên nếu đối tượng tin nhắn không có tiêu đề Content-Type.Lưu ý rằng việc sử dụng phương pháp này hơi khác so với việc xóa tiêu đề Content-Type cũ và thêm tiêu đề mới với ranh giới mới thông qua
add_header(), vìset_boundary()giữ nguyên thứ tự của tiêu đề Content-Type trong danh sách các tiêu đề.
- get_content_charset(failobj=None)¶
Trả về tham số
charsetcủa tiêu đề Content-Type, buộc phải viết thường. Nếu không có tiêu đề Content-Type hoặc nếu tiêu đề đó không có tham sốcharsetthì failobj sẽ được trả về.
- get_charsets(failobj=None)¶
Trả về danh sách chứa tên bộ ký tự trong tin nhắn. Nếu thông báo là multipart thì danh sách sẽ chứa một phần tử cho mỗi phần con trong tải trọng, nếu không, đó sẽ là danh sách có độ dài 1.
Mỗi mục trong danh sách sẽ là một chuỗi là giá trị của tham số
charsettrong tiêu đề Content-Type cho phần con được đại diện. Nếu phần con không có tiêu đề Content-Type, không có tham sốcharsethoặc không thuộc loại MIME chính text thì mục đó trong danh sách trả về sẽ là failobj.
- is_attachment()¶
Trả về
Truenếu có tiêu đề Content-Disposition và giá trị (không phân biệt chữ hoa chữ thường) của nó làattachment,Falsenếu không.Thay đổi trong phiên bản 3.4.2: is_attachment hiện là một phương thức thay vì thuộc tính, để đảm bảo tính nhất quán với
is_multipart().
- get_content_disposition()¶
Trả về giá trị viết thường (không có tham số) của tiêu đề Content-Disposition của tin nhắn nếu có hoặc
None. Các giá trị có thể có cho phương pháp này là inline, attachment hoặcNonenếu thông báo theo sau RFC 2183.Added in version 3.5.
Các phương pháp sau đây liên quan đến việc thẩm vấn và thao tác nội dung (tải trọng) của tin nhắn.
- walk()¶
Phương thức
walk()là một trình tạo đa năng có thể được sử dụng để lặp qua tất cả các phần và phần phụ của cây đối tượng thông báo, theo thứ tự duyệt theo chiều sâu. Thông thường, bạn sẽ sử dụngwalk()làm trình vòng lặp trong vòng lặpfor; mỗi lần lặp trả về phần con tiếp theo.Dưới đây là ví dụ in loại MIME của mọi phần của cấu trúc thông báo nhiều phần:
>>> cho một phần trong msg.walk(): ... in(part.get_content_type()) nhiều phần/báo cáo văn bản/đồng bằng tin nhắn/trạng thái giao hàng văn bản/đồng bằng văn bản/đồng bằng tin nhắn/rfc822 văn bản/đồng bằng
walklặp lại các phần con của bất kỳ phần nào màis_multipart()trả vềTrue, mặc dùmsg.get_content_maintype() == 'multipart'có thể trả vềFalse. Chúng ta có thể thấy điều này trong ví dụ của mình bằng cách sử dụng hàm trợ giúp gỡ lỗi_structure:>>> từ email.iterators nhập _structure >>> cho một phần trong msg.walk(): ... print(part.get_content_maintype() == 'multipart', ... part.is_multipart()) Đúng Đúng Sai Sai Sai Đúng Sai Sai Sai Sai Sai Đúng Sai Sai >>> _cấu trúc (tin nhắn) nhiều phần/báo cáo văn bản/đồng bằng tin nhắn/trạng thái giao hàng văn bản/đồng bằng văn bản/đồng bằng tin nhắn/rfc822 văn bản/đồng bằng
Ở đây các phần
messagekhông phải làmultipartsnhưng chúng có chứa các phần phụ.is_multipart()trả vềTruevàwalkchuyển xuống các phần phụ.
- get_body(preferencelist=('related', 'html', 'plain'))¶
Trả về phần MIME được coi là ứng cử viên sáng giá nhất để làm "nội dung" của tin nhắn.
preferencelist phải là một chuỗi các chuỗi từ tập hợp
related,htmlvàplainvà cho biết thứ tự ưu tiên cho loại nội dung của phần được trả về.Bắt đầu tìm kiếm các kết quả phù hợp với đối tượng mà phương thức
get_bodyđược gọi.Nếu
relatedkhông được bao gồm trong preferencelist, hãy xem xét phần gốc (hoặc phần phụ của phần gốc) của bất kỳ phần liên quan nào gặp phải làm ứng cử viên nếu phần (phụ) phù hợp với tùy chọn.Khi gặp
multipart/related, hãy kiểm tra tham sốstartvà nếu tìm thấy phần có Content-ID phù hợp, chỉ xem xét phần đó khi tìm kiếm kết quả phù hợp. Mặt khác, chỉ xem xét phần đầu tiên (gốc mặc định) củamultipart/related.Nếu một phần có tiêu đề Content-Disposition, chỉ coi phần đó là ứng cử viên phù hợp nếu giá trị của tiêu đề là
inline.Nếu không có ứng cử viên nào phù hợp với bất kỳ tùy chọn nào trong preferencelist, hãy trả về
None.Lưu ý: (1) Đối với hầu hết các ứng dụng, các kết hợp preferencelist duy nhất thực sự có ý nghĩa là
('plain',),('html', 'plain')và('related', 'html', 'plain')mặc định. (2) Bởi vì việc so khớp bắt đầu với đối tượng màget_bodyđược gọi, nên việc gọiget_bodytrênmultipart/relatedsẽ trả về chính đối tượng đó trừ khi preferencelist có giá trị không mặc định. (3) Các tin nhắn (hoặc các phần tin nhắn) không chỉ định Content-Type hoặc có tiêu đề Content-Type không hợp lệ sẽ được xử lý như thể chúng thuộc loạitext/plain, điều này đôi khi có thể khiếnget_bodytrả về kết quả không mong muốn.
- iter_attachments()¶
Trả về một trình vòng lặp trên tất cả các phần phụ ngay lập tức của thông báo không phải là phần "nội dung" ứng cử viên. Tức là bỏ qua lần xuất hiện đầu tiên của mỗi
text/plain,text/html,multipart/relatedhoặcmultipart/alternative(trừ khi chúng được đánh dấu rõ ràng là tệp đính kèm qua Content-Disposition: attachment) và trả lại tất cả các phần còn lại. Khi được áp dụng trực tiếp vàomultipart/related, hãy trả về một iterator trên tất cả các phần liên quan ngoại trừ phần gốc (tức là: phần được tham sốstarttrỏ đến hoặc phần đầu tiên nếu không có tham sốstarthoặc tham sốstartkhông khớp với Content-ID của bất kỳ phần nào). Khi áp dụng trực tiếp chomultipart/alternativehoặc không phảimultipart, hãy trả về một trình vòng lặp trống.
- iter_parts()¶
Trả về một trình vòng lặp cho tất cả các phần phụ ngay lập tức của tin nhắn, phần này sẽ trống đối với phần không phải
multipart. (Xem thêmwalk().)
- get_content(*args, content_manager=None, **kw)¶
Gọi phương thức
get_content()của content_manager, chuyển self làm đối tượng thông báo và chuyển bất kỳ đối số hoặc từ khóa nào khác làm đối số bổ sung. Nếu content_manager không được chỉ định, hãy sử dụngcontent_managerđược chỉ định bởipolicyhiện tại.
- set_content(*args, content_manager=None, **kw)¶
Gọi phương thức
set_content()của content_manager, chuyển self làm đối tượng thông báo và chuyển bất kỳ đối số hoặc từ khóa nào khác làm đối số bổ sung. Nếu content_manager không được chỉ định, hãy sử dụngcontent_managerđược chỉ định bởipolicyhiện tại.
Chuyển đổi tin nhắn không phải
multipartthành tin nhắnmultipart/related, di chuyển mọi tiêu đề và tải trọng Content- hiện có thành phần đầu tiên (mới) củamultipart. Nếu boundary được chỉ định, hãy sử dụng nó làm chuỗi ranh giới trong nhiều phần, nếu không, hãy để ranh giới được tạo tự động khi cần (ví dụ: khi tin nhắn được tuần tự hóa).
- make_alternative(boundary=None)¶
Chuyển đổi không phải
multiparthoặcmultipart/relatedthànhmultipart/alternative, di chuyển mọi tiêu đề và tải trọng Content- hiện có thành phần đầu tiên (mới) củamultipart. Nếu boundary được chỉ định, hãy sử dụng nó làm chuỗi ranh giới trong nhiều phần, nếu không, hãy để ranh giới được tạo tự động khi cần (ví dụ: khi tin nhắn được tuần tự hóa).
- make_mixed(boundary=None)¶
Chuyển đổi không phải
multipart,multipart/relatedhoặcmultipart-alternativethànhmultipart/mixed, di chuyển mọi tiêu đề và tải trọng Content- hiện có thành phần đầu tiên (mới) củamultipart. Nếu boundary được chỉ định, hãy sử dụng nó làm chuỗi ranh giới trong nhiều phần, nếu không, hãy để ranh giới được tạo tự động khi cần (ví dụ: khi tin nhắn được tuần tự hóa).
Nếu tin nhắn là
multipart/related, hãy tạo một đối tượng tin nhắn mới, chuyển tất cả các đối số cho phương thứcset_content()của nó vàattach()chomultipart. Nếu tin nhắn không phải làmultipart, hãy gọimake_related()rồi tiếp tục như trên. Nếu tin nhắn là bất kỳ loạimultipartnào khác, hãy đưa raTypeError. Nếu content_manager không được chỉ định, hãy sử dụngcontent_managerđược chỉ định bởipolicyhiện tại. Nếu phần được thêm vào không có tiêu đề Content-Disposition, hãy thêm một phần có giá trịinline.
- add_alternative(*args, content_manager=None, **kw)¶
Nếu tin nhắn là
multipart/alternative, hãy tạo một đối tượng tin nhắn mới, chuyển tất cả các đối số cho phương thứcset_content()của nó vàattach()chomultipart. Nếu tin nhắn không phải làmultiparthoặcmultipart/related, hãy gọimake_alternative()rồi tiếp tục như trên. Nếu tin nhắn là bất kỳ loạimultipartnào khác, hãy đưa raTypeError. Nếu content_manager không được chỉ định, hãy sử dụngcontent_managerđược chỉ định bởipolicyhiện tại.
- add_attachment(*args, content_manager=None, **kw)¶
Nếu tin nhắn là
multipart/mixed, hãy tạo một đối tượng tin nhắn mới, chuyển tất cả các đối số cho phương thứcset_content()của nó vàattach()chomultipart. Nếu tin nhắn không phải làmultipart,multipart/relatedhoặcmultipart/alternative, hãy gọimake_mixed()rồi tiếp tục như trên. Nếu content_manager không được chỉ định, hãy sử dụngcontent_managerđược chỉ định bởipolicyhiện tại. Nếu phần được thêm vào không có tiêu đề Content-Disposition, hãy thêm một phần có giá trịattachment. Phương pháp này có thể được sử dụng cho cả tệp đính kèm rõ ràng (Content-Disposition: attachment) và tệp đính kèminline(Content-Disposition: inline), bằng cách chuyển các tùy chọn thích hợp chocontent_manager.
- clear()¶
Loại bỏ tải trọng và tất cả các tiêu đề.
- clear_content()¶
Xóa tải trọng và tất cả các tiêu đề !Content-, giữ nguyên tất cả các tiêu đề khác và theo thứ tự ban đầu.
Các đối tượng
EmailMessagecó các thuộc tính phiên bản sau:- preamble¶
Định dạng của tài liệu MIME cho phép một số văn bản nằm giữa dòng trống theo tiêu đề và chuỗi ranh giới nhiều phần đầu tiên. Thông thường, văn bản này không bao giờ hiển thị trong trình đọc thư nhận biết MIME vì nó nằm ngoài lớp bảo vệ MIME tiêu chuẩn. Tuy nhiên, khi xem văn bản thô của tin nhắn hoặc khi xem tin nhắn trong trình đọc không nhận biết MIME, văn bản này có thể hiển thị.
Thuộc tính preamble chứa văn bản bổ sung hàng đầu này cho các tài liệu MIME. Khi
Parserphát hiện một số văn bản sau tiêu đề nhưng trước chuỗi ranh giới đầu tiên, nó sẽ gán văn bản này cho thuộc tính preamble của tin nhắn. KhiGeneratorđang viết văn bản đơn giản của tin nhắn MIME và nhận thấy tin nhắn có thuộc tính preamble, nó sẽ viết văn bản này vào vùng giữa tiêu đề và ranh giới đầu tiên. Xememail.parservàemail.generatorđể biết chi tiết.Lưu ý rằng nếu đối tượng thông báo không có phần mở đầu thì thuộc tính preamble sẽ là
None.
- epilogue¶
Thuộc tính epilogue hoạt động tương tự như thuộc tính preamble, ngoại trừ việc nó chứa văn bản xuất hiện giữa ranh giới cuối cùng và cuối tin nhắn. Giống như
preamble, nếu không có văn bản kết thúc thì thuộc tính này sẽ làNone.
- defects¶
Thuộc tính defects chứa danh sách tất cả các vấn đề được tìm thấy khi phân tích thông báo này. Xem
email.errorsđể biết mô tả chi tiết về các lỗi phân tích cú pháp có thể xảy ra.
- class email.message.MIMEPart(policy=default)¶
Lớp này đại diện cho một phần con của thông báo MIME. Nó giống hệt với
EmailMessage, ngoại trừ việc không có tiêu đề MIME-Version nào được thêm vào khiset_content()được gọi, vì các phần phụ không cần tiêu đề MIME-Version của riêng chúng.
Chú thích cuối trang