Функции и возможности
Функции и возможности
Эта страница охватывает все основные функции aspose-email-foss 26.3 с работающими Python примерами.
Чтение файлов MSG
Загрузите файл MSG и получите доступ к его основным свойствам:
from aspose.email_foss.msg import MapiMessage
msg = MapiMessage.from_file("message.msg")
print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html}")
print(f"Message Class: {msg.message_class}")Создание файлов MSG
Создайте новое сообщение с нуля:
from aspose.email_foss.msg import MapiMessage
msg = MapiMessage.create("Meeting Notes", "Please find the notes attached.")
msg.save("new_message.msg")Установите тему и тело в существующем сообщении:
msg.subject = "Updated Subject"
msg.body = "Updated body text"
msg.save("updated.msg")Получатели
Добавьте получателей с отображаемыми именами и типами:
from aspose.email_foss.msg import MapiMessage, RECIPIENT_TYPE_CC
msg = MapiMessage.create("Hello", "Message body")
msg.add_recipient("alice@example.com", display_name="Alice Smith")
msg.add_recipient("bob@example.com", display_name="Bob Jones", recipient_type=RECIPIENT_TYPE_CC)
msg.save("with_recipients.msg")Вложения
Добавьте двоичные вложения файлов:
with open("report.pdf", "rb") as f:
data = f.read()
msg.add_attachment("report.pdf", data, mime_type="application/pdf")
msg.save("with_attachment.msg")Вставьте сообщение MSG как вложение внутри вложения:
inner = MapiMessage.create("Inner Subject", "Inner body")
msg.add_embedded_message_attachment(inner, filename="embedded.msg", mime_type="application/vnd.ms-outlook")
msg.save("with_embedded.msg")Свойства MAPI
Чтение и запись свойств MAPI по идентификатору свойства:
from aspose.email_foss.msg import PropertyId
# Read a property
subject = msg.get_property(PropertyId.SUBJECT)
# Set a property
msg.set_property(PropertyId.SUBJECT, "New Subject")Перебор всех свойств:
for prop in msg.iter_properties():
print(f"Tag: {prop.property_tag:#010x}")Конвертация электронной почты
Преобразование между форматами MSG (MAPI) и email (RFC 5322):
# MSG to email string
email_str = msg.to_email_string()
print(email_str[:500])
# MSG to EmailMessage object
email_msg = msg.to_email_message()
# EmailMessage back to MapiMessage
msg2 = MapiMessage.from_email_message(email_msg)
msg2.save("roundtrip.msg")Низкоуровневые операции CFB
Чтение структуры контейнера CFB напрямую:
from aspose.email_foss.cfb import CFBReader
reader = CFBReader.from_file("message.msg")
print(f"File size: {reader.file_size} bytes")
print(f"Sectors: {reader.fat_sector_count}")
print(f"Entries: {reader.directory_entry_count}")
for entry in reader.iter_storages():
print(f"Storage: {entry}")
for entry in reader.iter_streams():
print(f"Stream: {entry}")
reader.close()Запись документов CFB:
from aspose.email_foss.msg import MsgWriter
data = msg.to_bytes()
with open("output.msg", "wb") as f:
f.write(data)Советы и лучшие практики
- Всегда вызывайте
msg.close()или используйте менеджер контекста после завершения чтения, чтобы освободить дескрипторы файлов - Используйте
msg.validation_issuesдля проверки проблем соответствия формата MSG - Эта
strictпараметр вMapiMessage.from_file()управляет допуском ошибок — установите вFalseдля менее строгого разбора - Все данные вложений загружаются в память во время
from_file()— использоватьatt.dataдля прямого доступа к байтам;iter_attachments_info()является удобным итератором по уже заполненному списку вложений - Используйте
to_email_string()для быстрого предварительного просмотра текста без полного построения объекта письма
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
CFBError при загрузке | Не является действительным файлом CFB/MSG | Убедитесь, что файл является настоящим Outlook MSG |
| Пустое тело после загрузки | Тело хранится только в HTML | Проверить msg.body_html вместо msg.body |
| Отсутствуют получатели | MSG не имеет хранилищ получателей | Получатели необязательны в формате MSG; проверьте iter_attachments_info() |
FAQ
Какие версии формата MSG поддерживаются?
Библиотека читает и записывает файлы MSG в формате CFB v3 и v4, совместимом с Microsoft Outlook.
Могу ли я читать файлы EML?
Не напрямую. Библиотека обрабатывает формат MSG. Используйте MapiMessage.from_email_message() для преобразования из RFC 5322 EmailMessage объекты.
Поддерживается ли потокобезопасность?
Каждый MapiMessage и CFBReader экземпляр независим. Параллельный доступ к отдельным экземплярам из разных потоков безопасен.
Сводка справочного API
| Класс / Метод | Описание |
|---|---|
MapiMessage | Высокоуровневое представление сообщения MSG |
MapiMessage.from_file() | Загрузить файл MSG |
MapiMessage.create() | Создать новое сообщение MSG |
MapiMessage.save() | Сохранить в файл MSG |
MapiMessage.to_email_message() | Преобразовать в EmailMessage (RFC 5322) |
MapiMessage.from_email_message() | Преобразовать из EmailMessage в MSG |
MapiMessage.add_recipient() | Добавить получателя |
MapiMessage.add_attachment() | Добавить бинарное вложение |
MapiAttachment | Вложение в сообщение |
MapiRecipient | Получатель сообщения |
MapiProperty | Запись свойства MAPI |
CFBReader | Низкоуровневый читатель контейнера CFB |
CFBWriter | Низкоуровневый записыватель контейнера CFB |
MsgReader | Низкоуровневый читатель структуры MSG |