Introdução
Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and Converter arquivos de mensagem compatíveis com o Outlook em Python puro. Disponível no PyPI como aspose-email-foss, funciona em Windows, macOS, Linux, Docker e ambientes sem servidor. sem dependência do Microsoft Office e sem tempo de execução proprietário.
A biblioteca abrange duas áreas principais: uma camada MAPI de alto nível (MapiMessage) para o trabalho A comunicação de mensagens é feita através da utilização de um sistema de informação, com sujeitos das mensagem, corpos, destinatários e anexos; camada (MsgReader, CFBReader, CFBStorage, CFBStream) que expõe o composto bruto. Containers binários de arquivo que sustentam cada .msg Arquivo.
Este artigo analisa os principais recursos fornecidos na versão 26.3, baseados na superfície API confirmada.
Características principais
Criação de mensagens de alto nível com MapiMessage
MapiMessage é o ponto de entrada primário para criar mensagens compatíveis com Outlook a partir do - Chama-me. MapiMessage.create() com um assunto e corpo, adicionar destinatários e O sistema de gestão da informação é o mais eficaz possível. .msg Arquivo.
from aspose.email_foss import msg
message = msg.MapiMessage.create(
"Quarterly status update",
"Hello team,\n\nPlease review the attached summary.\n\nRegards,\nEngineering",
)
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "agent@example.com")
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_attachment("report.txt", b"Summary content here.\n", mime_type="text/plain")
message.save("output.msg")
Leitura e inspeção de arquivos MSG
MsgReader O programa de investigação e desenvolvimento da UE é um dos principais instrumentos para a realização do projecto. .msg arquivo sem carregá-lo completamente em um MapiMessage.Exponha entradas de propriedade de nível superior, armazenamentos do destinatário e Os sistemas de armazenamento adjunto são individualmente, o que torna prático para a inspecção em grande escala e canais de validação.
from aspose.email_foss import msg
with msg.MsgReader.from_file("output.msg") as reader:
header = reader.top_level_header
print(f"Recipients : {header.recipient_count}")
print(f"Attachments: {header.attachment_count}")
for entry in reader.iter_recipient_storages():
_, props = reader.parse_subobject_property_stream(entry.stream_id)
print(f" Recipient storage {entry.name}: {len(props)} property entries")
MSG ida e volta: Carregar, modificar, guardar
Porque … MapiMessage suporte de from_file() para carga e save() para a escrita, um total de ciclo read-modify-write requer apenas algumas linhas. propriedades nomeadas, enums digitados e O tratamento de string Unicode está disponível através do set_property, PropertyId, e MapiNamedProperty.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("original.msg") as message:
message.set_property(msg.PropertyId.SUBJECT, "Updated Subject")
message.save("updated.msg")
EML / RFC 5322 Conversão
MapiMessage.to_email_message() converte um MSG carregado em Python padrão. email.message.EmailMessage Objeto, permitindo a exportação para RFC 5322 .eml formato usando A direcção inversa (MapiMessage.from_email_message()) construções a) MapiMessage de um EmailMessage.
from pathlib import Path
from aspose.email_foss import msg
with msg.MapiMessage.from_file("message.msg") as message:
eml_bytes = message.to_email_bytes()
Path("message.eml").write_bytes(eml_bytes)
# Reverse: load EML into MapiMessage
import email
raw_eml = Path("message.eml").read_bytes()
email_obj = email.message_from_bytes(raw_eml)
mapi = msg.MapiMessage.from_email_message(email_obj)
mapi.save("from_eml.msg")
CFB Transversal de recipientes
Cada um. .msg O ficheiro é um contêiner Compound File Binary (CFB). CFBReader fornece: acesso somente para leitura à árvore de diretórios, permitindo que você lista armazenamentos e fluxos, caminhar o hierarquia, e extrair bytes de fluxo cru sem depender da MsgReader.
from aspose.email_foss.cfb import CFBReader
with CFBReader.from_file("message.msg") as reader:
print(f"CFB version : {reader.major_version}")
print(f"Sector size : {reader.sector_size}")
for depth, entry in reader.iter_tree():
indent = " " * depth
size = entry.stream_size if entry.is_stream() else "-"
print(f"{indent}{entry.name} [size={size}]")
Manuseio de anexos
Os anexos são adicionados através do MapiMessage.add_attachment() (para dados binários) ou MapiMessage.add_embedded_message_attachment() (para mensagens embutidas de MSG). Aceitar um nome de arquivo, bytes cru e um tipo MIME opcional.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Attachment demo", "See files below.")
message.add_attachment("data.csv", b"id,value\n1,100\n", mime_type="text/csv")
inner = msg.MapiMessage.create("Nested message", "This is embedded.")
message.add_embedded_message_attachment(inner, "nested.msg")
message.save("with_attachments.msg")
Começo rápido
pip install aspose-email-fossfrom aspose.email_foss import msg
# Create and save a minimal MSG
message = msg.MapiMessage.create("Hello World", "This is a test message.")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "sender@example.com")
message.add_recipient("recipient@example.com", display_name="Recipient")
message.save("hello.msg")
# Load it back and convert to EML
with msg.MapiMessage.from_file("hello.msg") as loaded:
print(loaded.get_property_value(msg.PropertyId.SUBJECT))
eml = loaded.to_email_bytes()
open("hello.eml", "wb").write(eml)
Formatos suportados
| Formatos de imagem | Extensão | Leia. | Escrever . |
|---|---|---|---|
| Arquivo binário composto | .cfb | ✓ | ✓ |
| Mensagem Outlook | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
Open Source & Licenciamento
Aspose.Email FOSS for Python is released under the MIT License. The source repository is disponível em: Github.com/aspose-email-foss e o O pacote é publicado no PyPI como: aspose-email-foss.Utilização comercial, modificação e A redistribuição é permitida nos termos do MIT.