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-fossRequer Python 3.10 ou posterior.
Etapa 2: Importar a classe MapiMessage
from aspose.email_foss.msg import MapiMessageEtapa 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.