Usare Sed per recuperare le email "invisibili" in Thunderbird

Vediamo come si può usare una piccola utility da prompt dei comandi per recuperare le email cancellate per sbaglio da Mozilla thunderbird. Prendetelo come un semplice esercizio per imparare le regex o per imparare ad utilizzare sed. Per recuperare le email cancellate meglio usare un piccolo programmino che si chiama: Thunderbird Reset Status. Al momento Thunderbird Reset Status recupera le email ma perde eventuali marcature da parte dell’utente o stati di avvenuta risposta al messaggio, anche se Paolo Kaosmos, sviluppatore di moltissime utili estensioni per Firefox e Thunderbird nonchè moderatore sul forum di MozillaItalia, sta cercando di modificare il codice del programma per fare in modo che queste informazioni non vengano perse. Se siete interessati leggetevi questa discussione.

Prima di tutto bisogna spiegare cosa avviene quando un messaggio viene cancellato. Thunderbird in realtà non cancella il messaggio ma aumenta di otto unità il valore del parametro X-Mozilla-Status. Il messaggio, pur rimanendo nell’archivio, non verrà visualizzato da Thunderbird; per eliminare il messaggio dall’archivio è necessario compattare le cartelle. Dopo questa operazione il messaggio verrà definitivamente cancellato e non sarà più possibile recuperarlo. Se non si ha ancora compattato la cartella è quindi possibile recuperare le email “invisibili” diminuendo di otto unità il valore di X-Mozilla-Status.

In breve:

  • se il messaggio è stato letto l’ultima cifra di X-Mozilla-Status aumenta di uno;
  • se è stato risposto al messaggio,l’ultima cifra di X-Mozilla-Status aumenta di due;
  • se il messaggio viene marcato dall’utente, l’ultima cifra di X-Mozilla-Status viene aumentata di quattro unità;
  • se il messaggio viene cancellato l’ultima cifra di X-Mozilla-Status viene aumentata di otto.

Questo in sintesi, una spiegazione più accurata sui valori assunti da X-Mozilla-Status la trovate sul blog di pseudotecnico (link alla fine).

Ciò premesso, si può facilmente dedurre che tutti i messaggi cancellati hanno l’ultima cifra compresa fra 8 e F (valore esadecimale di 15=0001+0002+0004+0008).

E’ quindi sufficiente usare un editor di testo, modificare manualmente il valore di X-Mozilla-Status per recuperare le email cancellate. Naturalmente la cosa diventa abbastanza tediosa se le mail sono tante, senza togliere che gli editor di testo potrebbero avere problemi con file molto grossi. Bene, esiste un modo molto semplice per eseguire modifiche ad un file di testo senza editarlo, ed è utilizzare un editor di flusso come sed.

Bene, questo è il comando perrecuperare tutte le vostre email:

sed -e "/^X-Mozilla-Status:.*[89abcdef]$/{s/8$/0/;s/9$/1/;s/a$/2/;s/b$/3/;s/c$/4/;s/d$/5/;s/e$/6/;s/f$/7/}" prova. > prova2.

Su Linux probabilmente l’uso dell’apice singolo è preferibile rispetto all’uso dei doppi apici, su Windows l’uso dei doppi apici si rende necessario perché altrimenti viene ignorato il carattere ‘^’ che indica l’inizio della riga (in effetti è molto improbabile ci sia un matching da qualche altra parte ma giusto per essere precisi :-))

Riga che dovete copiare nel prompt dei comandi, dove naturalmente al posto di “prova.”, dovrete inserire il nome dell’archivio di posta che contiene le email da recuperare (ad esempio “inbox.” per la cartella “Posta in arrivo”) e al posto di “prova2.” il nome dell’archivio in cui verranno salvate le email recuperate. Ovviamente il comando va dato dalla cartella in cui si trovano gli archivi di posta (di solito: Profilo/Mail/Local Folders) e facendo attenzione ad aggiungere la cartella di “sed.exe” al PATH di sistema. Se è arabo chiedetelo nei commenti : Alla fine ho inserito il link ad un vecchio post che vi permette di attivare il copia/incolla nel prompt dei comandi, nonchè attivare l’autocompletamento, in modo da non metterci una vita intera :-P.

ATTENZIONE: se non siete esperti, lasciate perdere questo post, ignoratelo tranquillamente e passate oltre che altrimenti poi se perdete le vostre email ve la prendete con me :-P.

Cerchiamo di capire cosa fa. Prima guardiamo il comando nella sua interezza e poi vedremo di spiegare il significato di quello che c’è dentro agli apici:

sed -e "/regex/comandi" prova. > prova2.

viene tradotto così: leggi il flusso proveniente dal file “prova.” e applicagli lo script racchiuso fra i doppi apici (significato dell’opzione -e), quindi scrivi il flusso processato nel file “prova2.”. E ora vediamo il significato di ciò che è racchiuso fra apici.. Ci sono due parti, la prima è una regex (espressione regolare) e la seconda una sequenza di comandi separati dal ‘;’. Traducendo, sed legge il flusso riga per riga, quando incontra una riga che soddisfa la regex la processa applicando i relativi comandi. La regex viene racchiusa (sempre fra ‘/’. Per chi non lo sapesse, ecco il significato di alcuni caratteri usati nella regex:

  • ^ indica l’inizio riga;
  • $ indica la fine della riga;
  • . un qualunque carattere;
  • * una qualunque ripetizione del carattere, .* è qualsiasi cos
  • [xyz] il carattere può essere uno fra quelli indicati fra parentesi quadre, nel nostro caso le cifre (esadecimali): 8,9,a,b,c,d,e,f.

Detto questo:

/^/X-Mozilla-Status:.*[89abcdef]$/

significa: applica i comandi solo alle righe che iniziano con ‘X-Mozilla-Status:’ e che finiscono con uno dei caratteri racchiusi fra parentesi quadre, a queste vengono dunque applicate una serie di sostituzioni mediante il comando ‘[b]s/ / /[/b]’:

s/8$/0/;s/9$/1/;s/a$/2/;s/b$/3/;s/c$/4/;s/d$/5/;s/e$/6/;s/f$/7/

La sostituzione avviene (si veda l’uso del ‘$’ solo se il carattere si trova a fine riga. Si noti che se non si usasse questa accortezza, X-Mozilla-Status diventerebbe X-Mozillb-Stbtus e tutto andrebbe a farsi benedire.

Bene, un po’ contorto ma spero si capisca :-). Se volete “vedere i messaggi che si vanno a recuperare con questo metodo, provate con:

sed -n -e "/^X-Mozilla-Status:.*[89abcdef]$/,/^From/p" pinbox.  | more

in questo caso non specificando una periferica di output verrà visualizzato tutto a schermo :-). Naturalmente usare [strong]grep[/strong] è molto più sensato :-).

Download:
Sed e Grep per Windows li trovate a questo indirizzo, potete scaricarli singolarmente o via getGnuWin32 che vi scaricherà un sacco di altri utili applicazioni da linea di comando. Chi usa Cygwin non serve faccia nulla perchè vengono installate di default.

Thunderbird Reset Status lo potete scaricare da se siete utenti Windows e da ] se state usando Linux.

Link di approfondimento:
Documentazione Sed (la seconda parte dell’articolo è la più interessante delle tre),
Spiegazione dei valori assunti dall’X-Mozilla-Status,
Grep, cose utili da sapere,
Abilitare il copia/incolla e l’autocompletamento nel prompt dei comandi (Windows).

Technorati Tags: , , ,

0 Responses to “Usare Sed per recuperare le email "invisibili" in Thunderbird”


  • No Comments

Leave a Reply