Datare automaticamente i file EML
Qualche settimana fa ve lo avevo promesso ed ora eccolo: come datare automaticamente le email (salvate come file EML) con una regola di Hazel.
Gestire le email è una delle mie principali attività; collegata a questa c’è quella di archiviare e, all’occorrenza, (ri)trovare la corrispondenza.
Le funzioni di ricerca dei vari client di posta elettronica sono un’opzione ma più corrispondenza si accumula all’interno di un account di posta elettronica più cercare una specifica email è come cercare il fatidico ago nel pagliaio.
Attualmente io conservo tutta la corrispondenza (in formato EML) relativa ad una singola pratica / posizione all’interno di una sotto-cartella della pratica. Per poter leggere in modo semplice e veloce la corrispondenza in ordine cronologico quando archivio le email provvedo ad anteporre all’oggetto della email la data nel formato anno-mese-giorno.
Fino ad ora ho sempre usato uno snippet di TextExpander per svolgere questa operazione mentre salvavo il file EML. Pur essendo un’attività utile (quando poi devo ritrovare una email) mi richiede molto tempo, inoltre, se non provvedo ad archiviare nel medesimo giorno in cui ricevo o spedisco una email devo digitare la data a mano.
Apro una piccola parentesi: a dir la verità ho creato degli snippet di TextExpander che mi permettono di inserire velocemente le date precedenti di qualche giorno sottraendo giorni alla data corrente, in questo articolo trovate come fare al punto 3.2. Tuttavia, e capita relativamente spesso, quando archivio una email vecchia di qualche giorno o qualche settimana, gli snippet non mi sono utili.
Recentemente ho studiato un nuovo trucco per automatizzare l’inserimento della data nel nome del file che devo salvare.
1. Cos'è una email e come funziona alla base
Un’email è di fatto un messaggio di testo inviato attraverso internet. Se aprite infatti un file EML con TextEdit potrete leggere in chiaro il contenuto del file EML. Rispetto ad un normale file di testo il file EML ha due particolarità: 1. è strutturato con un apposito linguaggio di markup e campi specifici; 2. I file allegati sono salvati (dopo essere stati convertiti in base 64) come testo.
Fino ad ora con Hazel non avevo trovato un modo idoneo per recuperare la data dell’e-mail. Infatti avevo dei dati non sempre uniformi quando la salvavo il file in formato EML.
Mi è poi venuto in mente che, proprio perché il formato EML è uno standard ed è conservato in formato testuale, Hazel poteva esaminare il contenuto del file ed estrarre la data di spedizione utilizzando una regola di confronto ed accoppiamento.
2. Esempio di file EML standard
Nell’immagine che segue vedete come si presenta un file EML aperto con TextEdit.
Ho evidenziato quello che è la formattazione standard della data all’interno di una email.
Di fatto vi troverete una cosa simile a questa “Date: Mon, 6 Mar 2017 …”.
2.1 Esempio di file EML PEC
Come vi ho già scritto altrove, la PEC è una normale email con alcune aggiunte in più. Come potete vedere dall’immagine sottostante il file EML è “uguale” a quello di una email normale.
2.2 Il problema dei file EML non standard
Mentre stavo scrivendo questo articolo, tuttavia,mi sono accorto (per puro caso) che lo standard non è sempre rispettato. L’immagine sottostante è un’email con allegata la mia bolletta elettrica inviata da Enel con un sistema automatico.
Come potete vedere non rispetta lo standard che abbiamo visto ai punti precedenti, manca l‘ abbreviazione del nome del giorno.
Ho quindi modificato la regola di Hazel per funzionare in modo alternativo con entrambe le ipotesi. Questa particolarità inoltre mi permetterà di svelarvi un trucco ulteriore sull’utilizzo di Hazel, ovvero le “condizioni nidificate”.
3. La regola di Hazel
Vediamo quindi come creare la regola in Hazel. Come prima cosa dobbiamo decidere quale cartella monitorare. Io abitualmente salvo tutti i file EML in una cartella dal nome “email da archiviare” (nome non molto fantasioso ma chiaro nel suo scopo 😜).
Nell’immagine che segue vedete la regola (sulla destra) contenuta all’interno della cartella da monitorare (sulla sinistra).
3.1 Datare le email
Di seguito vedete la regola completa che ho creato e che, nei prossimi punti, vedremo in dettaglio.
Qui vi voglio dare la spiegazione complessiva del suo funzionamento.
Le prime due condizioni sono finalizzate a ridurre i casi in cui la regola opererà. Anzitutto il documento deve avere l’estensione EML. Secondariamente il nome del file non deve già contenere una data. Questo passaggio è importante perché altrimenti la regola opererebbe continuamente aggiungendo la data più e più volte.
Entra quindi in gioco la condizione nidificata. Questo tipo di condizione è utile per aggiungere un grado di discrezionalità alla regola di Hazel. Infatti mentre le precedenti condizioni operano sempre e devono ricorrere contemporaneamente (il file esaminato da Hazel deve essere un file EML è non essere datato per far scattare la condizione) la condizione nidificata è impostata per attivarsi in caso ricorra indifferentemente l’una o l’altra condizione.
Questo mi ha permesso di inserire due condizioni alternative ovvero che la data all’interno del file EML sia con lo schema standard o con quello non standard come nel caso dell’e-mail di Enel.
Usando poi una regola di confronto e accoppiamento, una volta che Hazel ha trovato la data secondo i parametri che gli ho impostato, potrà riutilizzare questo dato ed eseguire l’operazione programmata ovvero: rinominare il file EML con la data acquisita.
3.2 La regola di confronto ed accoppiamento vista in dettaglio
Nell’immagine che segue, per comodità, vi faccio vedere com’è composta la condizione per far scattare l’azione di Hazel.
Vediamo quindi come ho creato le singole condizioni.
Non vi parlerò della prima condizione perché è relativamente banale e fa il controllo sul fatto che il file abbia l’estensione EML.
3.3 Escludere i file EML già datati
Come vedrete nei punti seguenti, in questa specifica regola ho utilizzato abbondantemente i pattern (i modelli) di Hazel.
In questa prima condizione è richiesto che il nome del file non possedesse già il mio modello di data. In particolare ho utilizzato il modello legato ai numeri (indicato dal testo in blu "123") e strutturato nel seguente modello composito: una serie di numeri (l'anno), seguita da un “-”, seguita da un'altra serie di numeri (il mese), seguita da un “-”,seguita dal giorno, uno spazio vuoto e, infine, seguita da qualsiasi altra cosa (Anything) ovvero il "…" cerchiato in blu.
3.4 Come si aggiungono le condizioni nidificate
Ho poi aggiunto le condizioni nidificate. Queste possono essere inserite premendo il tasto ⌥. In questo modo il tasto "+" si trasformerà nel tasto "…" e permetterà di creare la condizione nidificata (nested condition). Come potete vedere nell'immagine sottostante.
Rispetto alla condizione principale in questo caso ho scelto l'opzione “any of the fllowing conditions are met” (qualsiasi condizione delle seguenti si sia avverata).
Con questo escamotage potremo impostare due differenti (ma similari) condizioni per ottenere il confronto e l'accopiamento della data dell'email.
3.5 La prima regola di confronto e accoppiamento della data
La prima regola di confronto è strutturata sul modello standard di data di una email.
La regola infatti cerca il modello "Date: una qualsiasi consecuzione di lettere [il giorno della settimana] una virgola e poi la data" che estrapolerà con il modello di ricerca che vedremo al punto successivo.
3.6 La seconda regola di confronto e accoppiamento della data
All'interno della prima regola ne ho inserita un'altra per l'estrazione della data. In particolare cerca il modello di data composto da il numero del giorno, le prime tre lettere del mese e l'anno a 4 cifre.
3.7 La regola alternativa di confronto e accoppiamento
La seconda regola alternativa l'ho creata esattamente con gli stessi passaggi visti nei punti 3.5 e 3.6 ma ho modificato il modello di ricerca adattandolo allo standard dell'email dell'Enel. In particolare ho tolto il parametro legato alla ricerca del modello del giorno.
Così facendo è possibile creare N regole alternative per le più disparate necessità o differenti modelli di ricerca da svolgere all'interno del testo contenuto in un documento.
3.8 La rinomina del file EML
Arriviamo quindi all'unica azione svolta da questa regola, ovvero la modifica del nome del file .EML con l'anteposizione della data al nome stesso.
Come vi ho già spiegato in questo articolo (al punto 2.3) la particolarità della regola di confronto ed accoppiamento della data, in Hazel, è che oltre a trovare il dato della data questo dato può essere usato altrove, come ad esempio per rinominare il file stesso.
4. Cosa manca: il passo finale
Come vi ho detto in questo articolo io archivio le email con questo schema: anno-mese-giorno (mittente) a (destinatario) (numero pratica) - [oggetto email] .
Teoricamente è possibile estrarre i dati del mittente e del destinatario dal testo del file EML.
Infatti all'interno dello stesso ci sono due parametri "From: …" e "To: …" dove sono contenuti l'indirizzo email rispettivamente del mittente e del destinatario nonché l'identificativo “colloquiale” racchiuso tra le virgolette (come si vede ad esempio nell'immagine del punto 2 di questo articolo)
Non mi ci sono spaccato la testa più di tanto ma i miei tentativi iniziali non hanno funzionato; inoltre il nome del destinatario o del mittente non può essere abbreviato. Io ad esempio metto (a mano) solitamente una cosa tipo "Strozzi a Sempronio" per individuare mittente e destinatario e non "Avv. Filippo Strozzi a Lucio Sempronio". Ho deciso quindi di soprassedere e, almeno per ora, continuare a svolgere l'operazione manualmente (velocizzando il tutto con qualche snippet di TextExpander).
5. In conclusione
In quest'articolo abbiamo visto più in dettaglio com'è costituito un file EML e come estrarre la data di spedizione dello stesso e rinominare il file con Hazel.
Abbiamo anche visto come implementare all'interno di Hazel le condizioni nidificate. Questa funzione ci permette di utilizzare la medesima regola in situazioni differenti.
La settimana prossima vedremo una nuova macro di Keyboard Maestro con cui automatizzare in Airmail il salvataggio delle email in una specifica cartella (la macro potrà essere anche usata per salvare i file EML in Mail, non vi preoccupate!).