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-foss
from 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 imagemExtensãoLeia.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.


Começar a Fazer

Recursos relacionados