Я создал эту функцию, и она работает, когда вложение не является электронным письмом, однако не обрабатывает электронное письмо с вложением:
Код: Выделить всё
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