Чтение вложений .msg из файла .msgPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Чтение вложений .msg из файла .msg

Сообщение Anonymous »

Я пытаюсь просмотреть большое количество файлов в своей папке и считать их в фрейм данных, готовый выполнить с ними некоторые НЛП. Некоторые из них — .pdf, .xlsx, .txt и т. д. Однако самая большая проблема у меня возникает с некоторыми документами в формате .msg. Мне удалось использовать пакет Extract-msg с умеренным успехом, однако он действительно с трудом обрабатывает электронные письма с вложениями, особенно если эти вложения сами являются электронными письмами.
Я создал эту функцию, и она работает, когда вложение не является электронным письмом, однако не обрабатывает электронное письмо с вложением:

Код: Выделить всё

import os
import extract_msg
import pandas as pd
import pdfplumber
from docx import Document
import re
import glob

# Function to process emails
def process_msg(file_path, input_folder):
try:
msg = extract_msg.openMsg(file_path)
email_content = {
"sender": msg.sender,
"subject": msg.subject,
"received_time": msg.receivedTime,
"body": msg.body or msg.htmlBody or "No content available"
}

attachments_data = []
attachments_folder = os.path.join(input_folder, "attachments")
os.makedirs(attachments_folder, exist_ok=True)

for att in msg.attachments:
att_name = get_unique_filename(sanitize_filename(att.name), input_folder)
att_ext = re.search(r"\.(\w+)$", att_name)
att_ext = att_ext.group(1).lower() if att_ext else None

saved_path = os.path.join(attachments_folder, att_name)
att.save(customPath=attachments_folder, customFilename=att_name)

if att_ext == "msg":
attachment_content  = process_msg(saved_path, input_folder)
attachments_data.append({
"type": "email",
"name": att_name,
"content": attachment_content
})

# This specifically removes .png and .jpg files from the attachments folder.
else:
print(f"Unsupported attachment type: {att_name}")
os.remove(saved_path)
attachments_data.append({
"type": "unsupported",
"name": att_name,
"content": f"Unsupported file type: {att_ext}"
})

return {
"email_content": email_content,
"attachments": attachments_data
}

except Exception as e:
print(f"Error processing email {file_path}: {e}")
return {
"email_content": "Error processing email",
"attachments": [],
"error": str(e)
}
В конечном итоге мне нужна таблица, похожая на эту:



Идентификатор документа
Данные
Путь к файлу
Вложение
Идентификатор Вложение




1
Электронная почта 1
Путь к файлу 1
N



2
Word1
Путь к файлу 2
Y
Электронная почта 1


3
PDF1
Путь к файлу 3
Н



4
Электронное письмо 2Путь к файлу 4
Y
Электронная почта 1

< tr>
5
Электронная почта 3
Путь к файлу 5
Y
Электронная почта 2



Где в электронном письме 1 было 2 вложения: документ Word (слово 1) и вложение электронного письма (электронное письмо 2). . Также к электронному письму 2 было вложение (письмо 3).

Подробнее здесь: https://stackoverflow.com/questions/793 ... a-msg-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»