Giới thiệu
Aspose.Email FOSS for Python vượt qua việc tạo tin nhắn cơ bản. Thư viện cung cấp toàn bộ độ sâu của mô hình thuộc tính MAPI, cho phép bạn đọc, ghi và truy vấn các thuộc tính riêng lẻ theo ID và kiểu. Nó xử lý người nhận, tệp đính kèm và tin nhắn nhúng như các đối tượng hạng nhất, và cung cấp chuyển đổi hai chiều giữa định dạng nhị phân MSG và chuẩn email.message.EmailMessage của Python.
Ở mức độ container, trình đọc và ghi CFB cung cấp cho bạn quyền kiểm soát quyết định đối với các tài liệu Compound File Binary. Bạn có thể duyệt qua các cây lưu trữ, trích xuất dữ liệu luồng thô, xây dựng các container mới từ đầu, và tuần tự hoá chúng trở lại thành byte. Cả CFBError và MsgError đều cung cấp xử lý ngoại lệ có cấu trúc cho đầu vào sai định dạng.
Bài viết này hướng dẫn từng khả năng với các ví dụ mã đã được xác minh, được rút ra trực tiếp từ bộ kiểm thử và các script ví dụ của thư viện.
Những gì được bao gồm
Truy cập thuộc tính MAPI
Mỗi tệp MSG được xây dựng dựa trên các thuộc tính MAPI. MapiMessage cung cấp set_property() và get_property() để làm việc với các thuộc tính theo giá trị enum PropertyId của chúng. Sử dụng iter_properties() để liệt kê tất cả các thuộc tính trên một tin nhắn, hoặc get_property_value() để truy xuất giá trị trực tiếp với việc giải mã kiểu tùy chọn.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Status report", "Weekly update attached.")
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "build.agent@example.com")
message.set_property(msg.PropertyId.DISPLAY_TO, "Alice Example; Bob Example")
message.set_property(msg.PropertyId.DISPLAY_CC, "Carol Example")
message.set_property(msg.PropertyId.DISPLAY_BCC, "Ops Archive")
message.set_property(
msg.PropertyId.TRANSPORT_MESSAGE_HEADERS,
"X-Environment: production\nX-Workflow: weekly-report\n",
)
message.save("report.msg")
Để đọc lại các thuộc tính từ một tệp hiện có:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("report.msg") as loaded:
print(f"Subject: {loaded.subject}")
print(f"Body: {loaded.body}")
for prop in loaded.iter_properties():
print(f"tag=0x{prop.property_tag:08X}")
Người nhận và Tệp đính kèm
Thêm người nhận với add_recipient(), chỉ định tên hiển thị và loại người nhận (To, CC hoặc BCC). Đính kèm tệp với add_attachment() bằng cách sử dụng byte thô và loại MIME. Đối với tin nhắn lồng nhau, add_embedded_message_attachment() chèn một MapiMessage hoàn chỉnh làm đối tượng con bên trong cha.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Team update", "See attached notes.")
message.add_recipient("alice@example.com", display_name="Alice Example")
message.add_recipient(
"carol@example.com",
display_name="Carol Example",
recipient_type=msg.RECIPIENT_TYPE_CC,
)
message.add_recipient(
"archive@example.com",
display_name="Ops Archive",
recipient_type=msg.RECIPIENT_TYPE_BCC,
)
message.add_attachment("notes.txt", b"Meeting notes content\n", mime_type="text/plain")
message.add_attachment("data.bin", b"\x00\x01\x02\x03", mime_type="application/octet-stream")
message.save("team-update.msg")
Để kiểm tra các tệp đính kèm trong một tin nhắn hiện có:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("team-update.msg") as loaded:
for att in loaded.iter_attachments_info():
print(f"name={att.filename} mime={att.mime_type} size={len(att.data)}")
print(f" embedded={att.is_embedded_message} storage={att.storage_name}")
Chuyển đổi MSG sang EmailMessage
Thư viện chuyển đổi theo cả hai hướng giữa MSG và email.message.EmailMessage của Python. Sử dụng to_email_message() để tạo một đối tượng MIME tuân thủ tiêu chuẩn, hoặc from_email_message() để nhập một EmailMessage hiện có vào định dạng MSG. Các phương thức tiện lợi to_email_bytes() và to_email_string() tuần tự hoá trực tiếp thành byte hoặc văn bản.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("example.msg") as loaded:
email_msg = loaded.to_email_message()
print(f"content_type: {email_msg.get_content_type()}")
print(f"is_multipart: {email_msg.is_multipart()}")
print(f"headers: {len(email_msg)}")
for key, value in email_msg.items():
print(f" {key}: {value}")
body_part = email_msg.get_body(preferencelist=("plain", "html"))
if body_part is not None:
print(f"body: {body_part.get_content()[:200]}")
CFB Container Round-Trip
Xây dựng và tuần tự hoá các container Compound File Binary một cách độc lập với lớp MSG. CFBDocument.from_file() tải một container hiện có vào mô hình tài liệu có thể thay đổi với các nút CFBStorage và CFBStream. CFBWriter.write_file() tuần tự hoá tài liệu trở lại đĩa một cách quyết định.
from aspose.email_foss.cfb import CFBDocument, CFBReader, CFBWriter
reader = CFBReader.from_file("container.cfb")
document = CFBDocument.from_reader(reader)
reader.close()
output = CFBWriter.to_bytes(document)
print(f"Serialized {len(output)} bytes")
Xử lý lỗi
Thư viện phát sinh CFBError cho nội dung CFB sai định dạng và MsgError cho cấu trúc MSG không hợp lệ. MapiMessage cũng cung cấp một thuộc tính validation_issues trả về một tuple các chuỗi cảnh báo mà không ném ngoại lệ, cho phép bạn quyết định mức độ nghiêm ngặt khi xử lý các tệp không tuân thủ.
from aspose.email_foss.cfb import CFBReader, CFBError
from aspose.email_foss.msg import MsgReader, MsgError
try:
reader = CFBReader.from_file("corrupted.cfb")
except CFBError as e:
print(f"CFB parse error: {e}")
try:
reader = MsgReader.from_file("malformed.msg")
except MsgError as e:
print(f"MSG parse error: {e}")
Bắt đầu nhanh
pip install aspose-email-foss>=26.3
Tải một tệp MSG hiện có, đọc siêu dữ liệu của nó và liệt kê các tệp đính kèm:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("inbox-message.msg") as message:
print(f"Subject: {message.subject}")
print(f"Body preview: {message.body[:200] if message.body else '(empty)'}")
for att in message.iter_attachments_info():
print(f"Attachment: {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
issues = message.validation_issues
if issues:
print(f"Warnings: {issues}")
Định dạng được hỗ trợ
| Định dạng | Nhập | Xuất |
|---|---|---|
| MSG | Có | Có |
| CFB | Có | Có |
Mã nguồn mở & Giấy phép
Aspose.Email FOSS for Python được phát hành dưới giấy phép MIT License. Bạn có thể sử dụng nó trong các dự án cá nhân, nội bộ và thương mại mà không có hạn chế. Mã nguồn có sẵn trên GitHub.