Comment puis-je modifier l'ordre d'un fichier mbox par ordre chronologique?
Question
J'ai un seul fichier mbox de bobine qui a été créé avec l'évolution, contenant une sélection de courriels que je souhaite imprimer. Mon problème est que les e-mails ne sont pas placés dans le fichier mbox par ordre chronologique. Je voudrais savoir la meilleure façon de passer commande les fichiers du premier au dernier en utilisant bash, perl ou python. Je voudrais oder par reçu pour les fichiers adressés à moi, et envoyé des fichiers envoyés par moi. Ne serait-il peut-être plus facile d'utiliser des fichiers maildir ou tel?
Les e-mails existent actuellement dans le format suivant:
From x@blah.com Fri Aug 12 09:34:09 2005
Message-ID: <42FBEE81.9090701@blah.com>
Date: Fri, 12 Aug 2005 09:34:09 +0900
From: me <x@blah.com>
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: someone <someone@hotmail.com>
Subject: Re: (no subject)
References: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
In-Reply-To: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status:
X-Keywords:
X-UID: 371
X-Evolution-Source: imap://x+blah.com@blah.com/
X-Evolution: 00000002-0010
Hey
the actual content of the email
someone wrote:
> lines of quotedtext
Je me demande s'il y a un moyen d'utiliser ces informations pour réorganiser facilement le fichier, peut-être avec perl ou tel.
La solution
Voici comment vous pouvez le faire en python:
#!/usr/bin/python2.5
from email.utils import parsedate
import mailbox
def extract_date(email):
date = email.get('Date')
return parsedate(date)
the_mailbox = mailbox.mbox('/path/to/mbox')
sorted_mails = sorted(the_mailbox, key=extract_date)
the_mailbox.update(enumerate(sorted_mails))
the_mailbox.flush()
Autres conseils
solution Python ne fonctionnera pas si les messages électroniques ont été importés dans Mbox en utilisant le addon ImportExportTools de Thunderbird. Il y a un bug: les messages sont préfixe avec « de » ligne au format:
From - Tue Apr 27 19:42:22 2010
mais préfixent ImportExportTools avec une telle ligne 'de':
From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)
Donc, il y a deux erreurs:
- séquence 'année temps cassé en 'Temps de l'année'
- poubelle supplémentaire avec GMT information avec le nom de fuseau horaire
Depuis mailbox.py/UnixMailbox Python a hardcoded pour la correspondance regexp ligne 'de', certains messages ne peuvent pas analysable.
J'ai écrit le message d'erreur à l'auteur, mais il y a beaucoup de messages importés par erreur: (
.Quel est le point de réécriture de la Mbox alors que vous pouvez réorganiser les mails en mémoire lors du chargement jusqu'à la boîte aux lettres? Quelle heure est celui que vous voulez commander sur? Date de réception? Date envoyée? Quoi qu'il en soit, tous les modules Ruby / Python / Perl pour jouer avec fichiers mbox peut le faire.