Как изменить порядок файлов mbox в хронологическом порядке?

У меня есть один файл mbox спула, созданный с помощью эволюции, содержащий набор писем, которые я хочу напечатать. Моя проблема в том, что электронные письма не помещаются в файл mbox в хронологическом порядке. Я хотел бы знать, как лучше всего упорядочить файлы от первого до последнего, используя bash, perl или python. Я хотел бы заказать полученные для файлов, адресованных мне, и отправленных для файлов, отправленных мной. Возможно, было бы проще использовать файлы maildir или что-то в этом роде?

Электронные письма в настоящее время существуют в формате:

From [email protected] Fri Aug 12 09:34:09 2005
Message-ID: <[email protected]>
Date: Fri, 12 Aug 2005 09:34:09 +0900
From: me <[email protected]>
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: someone <[email protected]>
Subject: Re: (no subject)
References: <[email protected]>
In-Reply-To: <[email protected]>
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://[email protected]/
X-Evolution: 00000002-0010

Hey

the actual content of the email

someone wrote:

> lines of quotedtext

Мне интересно, есть ли способ использовать эту информацию, чтобы легко реорганизовать файл, возможно, с помощью perl или чего-то подобного.


person Joshxtothe4    schedule 15.12.2008    source источник
comment
не предвосхищайте ответы в своих тегах   -  person    schedule 15.12.2008
comment
Есть языки, на которых мне нужны ответы, поэтому были добавлены соответствующие теги.   -  person    schedule 15.12.2008
comment
если вы хотите получить ответ на этих языках, укажите это в вопросе.   -  person    schedule 15.12.2008
comment
Я сделал! пожалуйста, перестаньте удалять мои теги   -  person    schedule 15.12.2008
comment
говоря об этом, пожалуйста, перестаньте заставлять нас делать всю вашу работу!   -  person    schedule 15.12.2008
comment
Прошу помощи, а не работы. Никто никого не заставляет отвечать.   -  person    schedule 15.12.2008


Ответы (3)


Вот как вы могли бы сделать это в 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()
person Community    schedule 15.12.2008
comment
Дата поставки: может быть недоступна. Дата: по-прежнему является официальной датой данного письма в соответствии с RFC. - person Keltia; 15.12.2008
comment
Ты прав. я предпочитаю это нам, потому что я не хочу, чтобы сломанные часы отправителя определяли мой порядок сортировки. - person ; 15.12.2008
comment
Спасибо за ваш ответ. Есть ли короткий ручной способ напечатать все сообщение, а не только тему? У меня возникли проблемы с поиском информации на email.get - person ; 15.12.2008
comment
Также, похоже, возникают проблемы с не интерпретируемыми символами Unicode или \n, есть ли способ установить кодировку или что-то подобное? - person ; 15.12.2008
comment
Вот что я имею в виду, заставляя нас делать вашу работу. вы можете найти документацию здесь: docs.python.org/library/mailbox.html - person ; 15.12.2008

Решение Python не будет работать, если почтовые сообщения были импортированы в mbox с помощью дополнения Thunderbird ImportExportTools. Есть баг: сообщения должны начинаться со строки from в формате:

From - Tue Apr 27 19:42:22 2010

но префикс ImportExportTools с такой строкой «от»:

From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)

Итак, две ошибки:

  1. последовательность «время год» разбита на «год время»
  2. лишний мусор с информацией по Гринвичу вместе с названием часового пояса

Поскольку mailbox.py/UnixMailbox в Python имеет жестко закодированное регулярное выражение для сопоставления строк «от», некоторые сообщения не могут быть проанализированы.

Я написал сообщение об ошибке автору, но там много ошибочно импортированных сообщений :(.

person Denis Barmenkov    schedule 01.05.2010

Какой смысл переписывать mbox, если можно изменить порядок писем в памяти при загрузке почтового ящика? На какое время вы хотите сделать заказ? Дата получения? Дата отправки? Во всяком случае, все модули Ruby/Python/Perl для работы с mbox могут это делать.

person Keltia    schedule 15.12.2008
comment
Потому что мне нужен файл для печати, а не для просмотра на компьютере. - person ; 15.12.2008
comment
Вы хотите распечатать почтовый ящик, как если бы это был один файл? Если это намерение, я бы посоветовал вам написать сценарий, который читает каждое сообщение в mbox и печатает их (возможно, используя шаблон) с помощью чего-то вроде enscript или a2ps. Делает проще и красивее. - person Keltia; 15.12.2008
comment
Файл mbox уже является одним файлом, проблема в том, что электронные письма в одном файле расположены не в хронологическом порядке. Я бы предпочел, чтобы он был текстовым, в данный момент я мог бы отправить его прямо в lpr: за исключением того, что он не в хронологическом порядке. - person ; 15.12.2008