Como posso reorganizar um arquivo mbox cronologicamente?
Pergunta
Eu tenho um único arquivo de spool mbox que foi criado com a evolução, contendo uma seleção de e-mails que eu deseja imprimir. Meu problema é que os e-mails não são colocados no arquivo mbox cronologicamente. Eu gostaria de saber a melhor maneira de colocar ordem os arquivos do primeiro ao último usando bash, perl ou python. Gostaria de oder pelo recebidas para arquivos dirigida a mim, e enviado para os arquivos enviados por mim. Será que talvez seja mais fácil usar maildir arquivos ou tal?
Os e-mails existir atualmente no formato:
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
Eu estou querendo saber se existe uma maneira de usar esta informação para facilmente reorganizar o arquivo, talvez com perl ou algo semelhante.
Solução
Isto é como você poderia fazer isso em 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()
Outras dicas
Python solução não vai funcionar se as mensagens de correio foi importado para mbox usando ImportExportTools complemento do Thunderbird. Há um erro: mensagens deve prefixo 'de' linha no formato:
From - Tue Apr 27 19:42:22 2010
mas ImportExportTools prefixar com tal 'de' linha:
From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)
Portanto, há dois erros:
- seqüência de 'ano de tempo' quebrado em 'Período do ano'
- lixo extra com GMT informações juntamente com o nome de fuso horário
Desde mailbox.py/UnixMailbox do Python tem codificado regexp para 'de' correspondência de linhas, algumas mensagens podem não analisado.
Eu escrevi a mensagem de erro para o autor, mas há muitas mensagens erroneamente importados: (
.Qual é o ponto em reescrever a mbox ao passo que você pode reordenar os e-mails na memória ao carregar a caixa de correio? Que o tempo é o que você quer de pedido no? Data de Recebimento? data de envio? De qualquer forma, todos os módulos Ruby / Python / Perl para brincar com as caixas de correio podem fazer isso.