Como analisar arquivos MSG em Python

Como analisar arquivos MSG em Python

aspose-email-foss para Python fornece uma API pura em Python para ler arquivos Outlook MSG sem dependências do Microsoft Office. Carregue um arquivo em um objeto MapiMessage para acessar todos os dados da mensagem.

Guia passo a passo

Etapa 1: Instalar o Pacote

pip install aspose-email-foss

Requer Python 3.10 ou posterior.


Etapa 2: Importar a classe MapiMessage

from aspose.email_foss.msg import MapiMessage

Etapa 3: Carregar um arquivo MSG

msg = MapiMessage.from_file("message.msg")

Para análise tolerante de arquivos malformados, passe strict=False:

msg = MapiMessage.from_file("message.msg", strict=False)

Passo 4: Acessar Propriedades da Mensagem

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

Etapa 5: Listar anexos

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

Etapa 6: Inspecionar Estrutura CFB de Baixo Nível

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

Problemas Comuns e Soluções

CFBError ao carregar

O arquivo não é um contêiner CFB válido. Verifique se é um arquivo Outlook MSG real, não um EML.

Corpo está vazio, mas o corpo HTML tem conteúdo

Algumas mensagens armazenam conteúdo apenas em HTML. Verifique msg.body_html quando msg.body retornar None.

Avisos de validação

Acesse msg.validation_issues para ver uma tupla de avisos de conformidade para o arquivo carregado.


Perguntas Frequentes (FAQ)

Posso ler arquivos EML?

Não diretamente. A biblioteca lida com o formato MSG (CFB). Converta o conteúdo EML para um objeto EmailMessage primeiro, então use MapiMessage.from_email_message().

O carregamento lê todos os dados do anexo na memória?

Yes. All attachment data including binary content is loaded into memory when MapiMessage.from_file() completes. iter_attachments_info() is a convenience iterator over the already-loaded attachments list.

É thread‑safe?

Cada instância MapiMessage é independente. Leituras concorrentes de instâncias separadas são seguras.

 Português