Въведение

Aspose.Email FOSS for Python goes beyond basic message creation. The library exposes the full depth of the MAPI property model, letting you read, write, and query individual properties by ID and type. It handles recipients, attachments, and embedded messages as first-class objects, and provides bidirectional conversion between the MSG binary format and Python’s standard email.message.EmailMessage.

На ниво контейнер CFB четецът и писателят ви предоставят детерминистичен контрол върху Compound File Binary документи. Можете да обхождате йерархии на съхранение, да извличате необработени данни от потоци, да създавате нови контейнери от нулата и да ги сериализирате обратно в байтове. И двете CFBError и MsgError предоставят структурирано обработване на изключения за неправилно форматиран вход.

Тази публикация преминава през всяка възможност с проверени примерни кодове, взети директно от тестовия набор и примерните скриптове на библиотеката.


Какво е включено

Достъп до MAPI свойства

Всеки MSG файл е построен върху MAPI свойства. MapiMessage излага set_property() и get_property() за работа със свойства по техния PropertyId enum стойност. Използвайте iter_properties() за изброяване на всички свойства на съобщение, или get_property_value() за директно извличане на стойност с опционално декодиране на тип.

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")

За да прочетете свойства от съществуващ файл:

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}")

Получатели и прикачени файлове

Добавете получатели с add_recipient(), като посочвате име за показване и тип получател (To, CC или BCC). Прикачете файлове с add_attachment() използвайки необработени байтове и MIME тип. За вложени съобщения, add_embedded_message_attachment() вгражда пълен MapiMessage като дъщерен обект в рамките на родителя.

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")

За да прегледате прикачените файлове в съществуващо съобщение:

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}")

Конверсия MSG към EmailMessage

Библиотеката конвертира в двете посоки между MSG и Python’s email.message.EmailMessage. Използвайте to_email_message() за създаване на съвместим със стандартите MIME обект, или from_email_message() за импортиране на съществуващ EmailMessage във формата MSG. Удобни методи to_email_bytes() и to_email_string() сериализират директно в байтове или текст.

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 контейнер – обратен процес

Създавайте и сериализирайте контейнери Compound File Binary независимо от слоя MSG. CFBDocument.from_file() зарежда съществуващ контейнер в променлив модел на документ с CFBStorage и CFBStream възли. CFBWriter.write_file() сериализира документа обратно на диска детерминистично.

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")

Обработка на грешки

Библиотеката изхвърля CFBError за повредено CFB съдържание и MsgError за невалидна MSG структура. MapiMessage също така предоставя validation_issues свойство, което връща кортеж от низове за предупреждения без да изхвърля изключение, позволявайки ви да решите колко стриктно да обработвате несъответстващи файлове.

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}")

Бърз старт

pip install aspose-email-foss>=26.3

Заредете съществуващ MSG, прочетете неговите метаданни и изброете прикачените файлове:

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}")

Поддържани формати

ФорматИмпортЕкспорт
MSGДаДа
CFBДаДа

Отворен код и лицензиране

Aspose.Email FOSS for Python is released under the MIT License. Можете да го използвате в лични, вътрешни и комерсиални проекти без ограничения. Изходният код е достъпен на GitHub.


Започване