.partial.emlx delle Mail da Apple Mail e Organizzarli in Modo EfficienteSe hai mai dovuto recuperare email da Apple Mail, probabilmente hai incontrato i file .emlx e .partial.emlx. Questi file sono utilizzati da Mail.app per archiviare i messaggi nelle sue cartelle di sistema, ma non sono compatibili con molte altre applicazioni di posta elettronica che usano il formato .eml. In questo articolo ti mostrerò come convertire, rinominare e organizzare questi file in modo efficiente.
.partial.emlxPer convertire i file .emlx e .partial.emlx in un formato leggibile come .eml, puoi utilizzare lo strumento partial-emlx-converter.
partial-emlx-converter su macOSIl modo più semplice per installare partial-emlx-converter è tramite Homebrew. Se non hai ancora Homebrew, puoi installarlo con questo comando nel terminale:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Una volta installato Homebrew, esegui il seguente comando per installare partial-emlx-converter:
brew install qqilihq/partial-emlx-converter/partial-emlx-converter
In alternativa, se preferisci usare Node.js, puoi installarlo con:
npm install --global partial-emlx-converter
partial-emlx-converterUna volta installato, puoi convertire i file .emlx e .partial.emlx con il seguente comando:
partial-emlx-converter /path/to/input /path/to/output
/path/to/input è la cartella contenente i file .emlx e .partial.emlx, mentre /path/to/output è la cartella in cui vuoi salvare i file convertiti in formato .eml.
Dopo aver convertito i file in .eml, puoi rinominarli basandoti sull’oggetto dell’email per una migliore organizzazione. A tal fine, puoi utilizzare uno script Python chiamato rename_eml.py.
rename_eml.pyimport os
import email
import email.header
import quopri
import re
# Directory dove si trovano i file .eml
directory = "/path/to/output"
# Funzione per decodificare l'oggetto delle email
def decode_header_value(value):
decoded_parts = email.header.decode_header(value)
decoded_string = ""
for part, encoding in decoded_parts:
if isinstance(part, bytes):
try:
decoded_string += part.decode(encoding or 'utf-8', errors='ignore')
except Exception as e:
print(f"Errore durante la decodifica: {e}")
else:
decoded_string += part
return decoded_string
# Funzione per estrarre e pulire l'oggetto
def get_subject_from_eml(eml_file):
try:
with open(eml_file, 'r', encoding='utf-8') as f:
msg = email.message_from_file(f)
except UnicodeDecodeError:
with open(eml_file, 'r', encoding='ISO-8859-1', errors='ignore') as f:
msg = email.message_from_file(f)
subject = msg.get('Subject', 'unknown_subject')
subject = decode_header_value(subject)
if not subject.strip():
subject = "senza_oggetto"
subject = re.sub(r'[\\/*?:"<>|]', "_", subject)
return subject[:80]
# Ciclo attraverso tutti i file nella directory
for filename in os.listdir(directory):
if filename.endswith(".eml"):
old_file = os.path.join(directory, filename)
subject = get_subject_from_eml(old_file)
new_file = os.path.join(directory, f"{subject}.eml")
if not os.path.exists(new_file):
try:
os.rename(old_file, new_file)
print(f"Rinominato: {old_file} -> {new_file}")
except OSError as e:
print(f"Errore durante la rinomina di {old_file}: {e}")
Il passo successivo è organizzare le email in base al mittente, creando una cartella separata per ogni indirizzo email. Puoi usare lo script move_in_from_mail_folder_eml.py per farlo.
move_in_from_mail_folder_eml.pyimport os
import email
import shutil
import re
directory = "/path/to/output"
def decode_header_value(value):
decoded_parts = email.header.decode_header(value)
decoded_string = ""
for part, encoding in decoded_parts:
if isinstance(part, bytes):
try:
decoded_string += part.decode(encoding or 'utf-8', errors='ignore')
except Exception as e:
print(f"Errore durante la decodifica: {e}")
else:
decoded_string += part
return decoded_string
def get_sender_from_eml(eml_file):
try:
with open(eml_file, 'r', encoding='utf-8') as f:
msg = email.message_from_file(f)
except UnicodeDecodeError:
with open(eml_file, 'r', encoding='ISO-8859-1', errors='ignore') as f:
msg = email.message_from_file(f)
sender = msg.get('From', 'unknown_sender')
sender = decode_header_value(sender)
if "<" in sender and ">" in sender:
sender = sender.split("<")[1].split(">")[0]
sender = re.sub(r'[\\/*?:"<>|]', "_", sender)
return sender
def get_subject_from_eml(eml_file):
subject = decode_header_value(subject)
if not subject.strip():
subject = "senza_oggetto"
subject = re.sub(r'[\\/*?:"<>|]', "_", subject)
return subject[:80]
for filename in os.listdir(directory):
if filename.endswith(".eml"):
old_file = os.path.join(directory, filename)
sender = get_sender_from_eml(old_file)
sender_dir = os.path.join(directory, sender)
if not os.path.exists(sender_dir):
os.makedirs(sender_dir)
subject = get_subject_from_eml(old_file)
new_file = os.path.join(sender_dir, f"{subject}.eml")
if not os.path.exists(new_file):
try:
shutil.move(old_file, new_file)
print(f"Spostato: {old_file} -> {new_file}")
except OSError as e:
print(f"Errore durante lo spostamento di {old_file}: {e}")
Infine, puoi raggruppare le email per dominio del mittente (es. rcs.it, gmail.com) utilizzando lo script group_by_domain.py.
group_by_domain.pyimport os
import shutil
base_directory = "/path/to/output"
def get_domain_from_email(email):
if "@" in email:
return email.split("@")[1]
return None
for folder_name in os.listdir(base_directory):
folder_path = os.path.join(base_directory, folder_name)
if os.path.isdir(folder_path):
domain = get_domain_from_email(folder_name)
if domain:
domain_folder = os.path.join(base_directory, domain)
if not os.path.exists(domain_folder):
os.makedirs(domain_folder)
new_folder_path = os.path.join(domain_folder, folder_name)
try:
shutil.move(folder_path, new_folder_path)
print(f"Spostato: {folder_path} -> {new_folder_path}")
except OSError as e:
print(f"Errore durante lo spostamento di {folder_path}: {e}")
Utilizzando questi strumenti, puoi convertire, rinominare e organizzare facilmente i tuoi file email, semplificando la gestione di grandi volumi di posta archiviata da Apple Mail.