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?

Não. Os metadados do anexo são lidos sob demanda. Use iter_attachments_info() para iteração leve.

É thread‑safe?

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

 Português