Ir al contenido principal

Emails - Extraer adjuntos de una cadena de correos y acompañarlos como documental

 Programa Python:

Grabar este código en el script EmailExtraerAdjuntos.py, colocarlo en la carpeta donde se encuentran todos los correos de extensión eml y ejecutarlo mediante la siguiente sentencia:

python3 EmailExtraerAdjuntos.py

En la subcarpeta Adjuntos se encontrarán todos los adjuntos Docx, Xlsx, Pdf entre otros. Separar los archivos Docx y Xlsx en subcarpetas y ejecutar la siguiente sentencia para convertirlos a formato PDF.

  1. libreoffice --headless --convert-to pdf *.docx
    1. libreoffice --headless --convert-to pdf *.xlsx
    Programa Python EmailExtraerAdjuntos.py:
import os
import email
import shutil

def extract_attachments(eml_file, output_folder):
    with open(eml_file, 'rb') as f:
        msg = email.message_from_binary_file(f)
        for part in msg.walk():
            if part.get_content_maintype() == 'multipart':
                continue
            if part.get('Content-Disposition') is None:
                continue
            
            filename = part.get_filename()
            if filename:
                filepath = os.path.join(output_folder, filename)
                # Check if file with same name already exists
                if os.path.exists(filepath):
                    base, ext = os.path.splitext(filename)
                    count = 1
                    while True:
                        new_filename = f"{base}_{count:02d}{ext}"
                        new_filepath = os.path.join(output_folder, new_filename)
                        if not os.path.exists(new_filepath):
                            break
                        count += 1
                    filepath = new_filepath

                with open(filepath, 'wb') as attachment:
                    attachment.write(part.get_payload(decode=True))
                print(f"Extracted: {filename} (saved as {os.path.basename(filepath)})")

def main():
    eml_folder = "path/to/eml/folder"
    output_folder = os.path.join(eml_folder, "Adjuntos")

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for filename in os.listdir(eml_folder):
        if filename.endswith(".eml"):
            eml_file = os.path.join(eml_folder, filename)
            extract_attachments(eml_file, output_folder)

if __name__ == "__main__":
    main()

Comentarios